16

मैं एक नौसिखिया एंड्रॉइड प्रोग्रामर हूं।एंड्रॉइड - IllegalStateException: मानचित्र का आकार शून्य है

मुझे कुछ संदर्भ दें।
मेरी परियोजना एक्शनबैरशेलॉक का उपयोग करती है। एक SherlockListFragment और एक गूगल मैप्स MapView (अनिवार्य रूप से एक MapFragment) युक्त एक SherlockFragment -

  1. मैं एक गतिविधि (Activity1) है कि दो टुकड़े शामिल है।
  2. खोज परिणाम सूची टुकड़े और नक्शा टुकड़े में प्रदर्शित होते हैं, और एक एक्शन बार विकल्प बटन वर्तमान में सूची और मानचित्र के बीच दिखाए गए टुकड़े को टॉगल करता है।
  3. सूची में कोई आइटम चुनना या खोज परिणामों के मानचित्र का चयन एक नई गतिविधि (गतिविधि 2) चयनित आइटम से डेटा प्रदर्शित करना शुरू करता है।
  4. इस नई गतिविधि में एक समान प्रवाह है: डेटा दिखाने के लिए एक टुकड़ा, और एक स्थान दिखाने के लिए नक्शा खंड - एक एक्शन बार विकल्प बटन द्वारा टॉगल किया गया।

समस्या:

  1. मैं खोज परिणामों (Activity1) सूची टुकड़ा में किसी सूची आइटम और विवरण पृष्ठ (activity2) का चयन कर सकते सफलतापूर्वक प्रारंभ किया गया है।
  2. जब मैं नक्शा ओवरले (गतिविधि 1) में नक्शा आइटम का चयन करता हूं, तो ऐप क्रैश हो जाता है, और मुझे नीचे दिखाया गया स्टैकट्रैक मिलता है।

क्या मैं अब तक की कोशिश की है:

  1. मैं और सहित "एंड्रॉयड" और "illegalstateexception" और के विभिन्न लाइनों एक ही खोज के कई क्रमपरिवर्तन "नक्शा आकार शून्य है" के लिए खोज की है स्टैकट्रैस और मैंने उन परिणामों की जांच की है जो एंड्रॉइड से भी संबंधित नहीं हैं लेकिन सामान्य रूप से Google मानचित्र एपीआई से संबंधित हैं, और मैं इस यूआरएल http://www.androidpub.com/1551654 पर छोड़कर इस त्रुटि का सामना करने वाले किसी भी चीज़ या किसी भी व्यक्ति को खोजने में सक्षम नहीं हूं लेकिन मुझे कोरियाई नहीं पता, और Google अनुवाद बहुत मदद नहीं था।
  2. मैंने यह देखने के लिए स्रोत कोड के कुछ स्निपेट खोजने की कोशिश की है कि क्या हो रहा है, लेकिन यह कुछ भी नहीं हुआ।
  3. मैंने अपवाद होने पर कोशिश करने और पिनपॉइंट करने के लिए अपने कोड में लॉग जोड़े हैं, और जो कुछ भी मैं पाया है वह यह है कि यह कुछ समय बाद होता है (गतिविधि 2) विवरण गतिविधि शुरू होने के बाद, यानी क्रिएट () कहा जाता है। और दोनों विवरण खंड और नक्शा खंड में बूथ को सफलतापूर्वक चालू किया गया है()। मैं अपवाद को पकड़ने के लिए अपने कोड में कोई जगह नहीं ढूंढ पा रहा हूं। तो जो कुछ भी मैं देख सकता हूं, यह अपवाद पूरी तरह से Google के MapView कोड में एक बग प्रतीत होता है, लेकिन अगर मैंने कहीं भी गलती की है, तो कृपया इसे दिखाएं। मैं किसी से भी मदद करने के लिए खुला हूं जो मुझे बता सकता है कि यहां क्या हो रहा है।

तो संक्षेप में। क्रैश तब होता है जब किसी गतिविधि (गतिविधि 1) से वर्तमान में किसी अन्य गतिविधि (गतिविधि 2) में नक्शादृश्य दिखाया जाता है जो एक और नक्शादृश्य वाला एक टुकड़ा होस्ट करता है। लेकिन दुर्घटना तब नहीं होती है जब सूची विभाजन (गतिविधि 1) में दूसरी गतिविधि (गतिविधि 2) में दिखाया जा रहा है जिसमें एक और नक्शा खंड होता है।

मुझे आशा है कि यह पर्याप्त जानकारी है। यदि आपके कोई प्रश्न हैं, तो कृपया टिप्पणी करें।

D/memalloc( 121): /dev/pmem: Allocated buffer base:0x4215c000 size:2088960 offset:4177920 fd:66 
D/memalloc(30944): /dev/pmem: Mapped buffer base:0x5b4f5000 size:6266880 offset:4177920 fd:164 
D/AndroidRuntime(30944): Shutting down VM 
W/dalvikvm(30944): threadid=1: thread exiting with uncaught exception (group=0x40aaa228) 
E/AndroidRuntime(30944): FATAL EXCEPTION: main 
E/AndroidRuntime(30944): java.lang.IllegalStateException: Map has zero size 
E/AndroidRuntime(30944): at android_maps_conflict_avoidance.com.google.googlenav.map.Map.drawMap(Map.java:818) 
E/AndroidRuntime(30944): at com.google.android.maps.MapView.drawMap(MapView.java:1091) 
E/AndroidRuntime(30944): at com.google.android.maps.MapView.onDraw(MapView.java:522) 
E/AndroidRuntime(30944): at android.view.View.draw(View.java:11071) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10462) 
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425) 
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425) 
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425) 
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425) 
E/AndroidRuntime(30944): at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605) 
E/AndroidRuntime(30944): at android.view.View.getDisplayList(View.java:10425) 
E/AndroidRuntime(30944): at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:879) 
E/AndroidRuntime(30944): at android.view.ViewRootImpl.draw(ViewRootImpl.java:1948) 
E/AndroidRuntime(30944): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1654) 
E/AndroidRuntime(30944): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2498) 
E/AndroidRuntime(30944): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(30944): at android.os.Looper.loop(Looper.java:154) 
E/AndroidRuntime(30944): at android.app.ActivityThread.main(ActivityThread.java:4894) 
E/AndroidRuntime(30944): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(30944): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(30944): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
E/AndroidRuntime(30944): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
E/AndroidRuntime(30944): at dalvik.system.NativeStart.main(Native Method) 
E/EmbeddedLogger( 254): App crashed! Process: com.myapp.android 
E/EmbeddedLogger( 254): App crashed! Package: com.myapp.android v5 (2.0) 
E/EmbeddedLogger( 254): Application Label: myapp 
W/ActivityManager( 254): Force finishing activity com.myapp.android/.activity.InfoActivity 
W/ActivityManager( 254): Force finishing activity com.myapp.android/.activity.SearchActivity 
+1

मैं इस सूत्र पाया, जबकि एक ही ERRORMSG के लिए खोज "मानचित्र आकार शून्य है", मुझे पता चला मैं गलती से एक और आइटम के लिए "match_parent" "wrap_content के बजाय सेट कर लिया है "और इस प्रकार स्क्रीन के मानचित्रदृश्य को दबाकर - इस त्रुटि के परिणामस्वरूप। क्या आप वाकई अपना लेआउट MapView प्रदर्शित कर सकते हैं? – Fluff

+0

मुझे एक ही समस्या का सामना करना पड़ा है, मेरे मामले में मैंने XML फ़ाइल – Sridhar

+0

में कुछ बदलाव किए हैं, क्या आप नक्शादृश्य वाली दो गतिविधियों के लिए अलग-अलग प्रक्रिया का उपयोग कर रहे हैं। http://stackoverflow.com/questions/3379575/how-to-use-multiple-mapactivities-mapviews-per-android-application-process/3380655#3380655 –

उत्तर

0

इस बिंदु पर, इस अनुभव से, इस बग से बचने का एकमात्र तरीका है, Fragments के अंदर MapViews का उपयोग नहीं करना है।एक मैप व्यू को चारों तरफ ले जाना, चाहे एनीमेशन या माता-पिता के दृश्य में जोड़े जाने के बाद इसकी स्थिति के साथ छेड़छाड़ करना हमेशा मुझे समस्याएं पैदा करता है। मुझे मिला सबसे प्रभावी तरीका एक मानचित्र और दूसरे दृश्य के बीच टॉगल करना है जहां MapActivity MapView का प्रबंधन करता है और एक खंड अन्य दृश्य का प्रबंधन करता है। मैंने फिर से एक ही सुविधा को फिर से कार्यान्वित किया, और इसने कोई समस्या नहीं की है। हालांकि, मैं देखता हूं कि यह किसी अज्ञात कारण के साथ किसी समस्या के लिए एक समाधान है (एंड्रॉइड मैप्स एपीआई में एक बग की संभावना है)।

0

मैं एडम के साथ बिल्कुल असहमत हूं! टुकड़े और गतिविधियों का प्रबंधन करना सबसे अच्छा अभ्यास है।

यह काफी अलग है, और कभी-कभी यह कुछ भी काम करना मुश्किल होता है, लेकिन एक टुकड़े के रूप में नक्शा खंड का प्रबंधन करना, या कई गतिविधियों द्वारा उपयोग किए जाने वाले किसी अन्य टुकड़े के अंदर सबसे अच्छा है यदि आप शामिल करने की योजना बना सकते हैं अपने ऐप के कई विचारों में नक्शे।

तो, बिंदु पर जाकर, क्योंकि आपने कोई कोड पोस्ट नहीं किया है, मुझे लगता है कि आप कैमरे को एनिमेट कर रहे हैं सीमाओं को रीसेट करने के लिए हो सकता है, या बस आपके मानचित्र के लिए प्रारंभिक केंद्र स्थापित कर सकता है। (सबसे अधिक संभावना है कि आप परिणाम दिखा रहे हैं)

और उस स्थिति में, अपवाद map.animateCamera(...) लाइन में होगा, क्योंकि आप उपलब्ध कुछ चीज़ों से निपट रहे हैं लेकिन यह अभी तक फुलाया नहीं गया है।

कोशिश इस एक:

try{ 
     cu = CameraUpdateFactory.newLatLngBounds(yourBoundaries,yourPadding); 
     map.animateCamera(cu); 
     System.out.println("Set with padding"); 
    } catch(IllegalStateException e) { 
     e.printStackTrace(); 
     cu = CameraUpdateFactory.newLatLngBounds(yourBoundaries,someWidth,someHeight,zeroPadding); 
     map.animateCamera(cu); 
     System.out.println("Set with whp"); 
    } 
संबंधित मुद्दे