2016-03-26 13 views
5

द्वारा रिपोर्ट किया गया है मैं हाइब्रिड एंड्रॉइड ऐप बनाने के लिए आयनिक फ्रेमवर्क का उपयोग कर रहा हूं और ऐप ठीक काम करता है। मैं फैब्रिक क्रैश एनालिटिक्स प्लगइन का उपयोग कर रहा हूं और इसकी ऐप की दुर्घटनाओं की रिपोर्टिंग कर रहा हूं।कॉर्डोवा ऐप में नलपोइंटर एक्सेप्शन फैब्रिक एसडीके

मुझे नीचे क्रैश विवरण मिल रहा है और यह सुनिश्चित नहीं है कि इसका क्या कारण है। मुझे यकीन नहीं है कि यह एनालिसिसिंग शुरू करने के लिए शुरुआती बिंदु क्या होगा।

Fatal Exception: java.lang.NullPointerException 
     at android.webkit.WebViewClassic.setNetworkAvailable(WebViewClassic.java:4224) 
     at android.webkit.WebView.setNetworkAvailable(WebView.java:731) 
     at org.apache.cordova.engine.SystemWebViewEngine$1.setNetworkAvailable(SystemWebViewEngine.java:112) 
     at org.apache.cordova.NativeToJsMessageQueue$OnlineEventsBridgeMode$2.run(NativeToJsMessageQueue.java:340) 
     at android.os.Handler.handleCallback(Handler.java:725) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5319) 
     at java.lang.reflect.Method.invokeNative(Method.java) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869) 
     at dalvik.system.NativeStart.main(NativeStart.java) 

क्या यह किसी भी प्लगइन या आयनिक या कॉर्डोवा में किसी भी मुद्दे से संबंधित है? कोई मदद या सलाह सहायक होगी।

उत्तर

2

मुझे एक ही समस्या है। मैं कॉर्डोवा और फैब्रिक क्रैशलिटिक्स का भी उपयोग करता हूं।

यह केवल एंड्रॉइड 4.1.2, 4.2.2, 4.3 पर पुन: उत्पन्न होता है।

मैं बग reproduced है सामग्री है कि जावास्क्रिप्ट कार्य शामिल साथ

  1. खुला WebView;
  2. खुला नया वेब व्यू और इसे बंद करें;
  3. अक्षम नेटवर्क (वाईफ़ाई और मोबाइल) जितनी जल्दी हो सके;
  4. ऐप पर वापस लौटें और स्टैकट्रैक दिखाएं।

    मेरे एप्लिकेशन में मैं CordovaActivity का उपयोग नहीं कर रहा हूँ:

मैं एक समाधान मिल गया। मैं कॉर्डोवाइंटरफेस का उपयोग कर रहा हूं। हटाए गए वेबव्यू से जुड़े प्लगइन प्रबंधक अपने तरीकों को कॉल करना जारी रखता है। तो मैं प्लगइनमेनर को नष्ट करने के लिए मैन्युअल कॉल WebView.handleDestroy() को कॉल करता हूं।

मेरी टुकड़ा में:

@Override 
public void onDestroy() 
{ 
    if (webView != null) 
    { 
     webView.handleDestroy(); 
     webView.destroy(); 
     webView = null; 
    } 

    super.onDestroy(); 
} 

अद्यतन: यह है जब आप WebView को नष्ट, लेकिन PluginManager रहने के लिए जारी है और ग्राहकों (WebViews) को javascripts घटनाओं भेजता reproduced है। क्योंकि मैं WebView.handleDestroy() को कॉल करता हूं।

+0

साथ webView.setNetworkAvailable(value); बदलें आप कृपया समझा सकते हैं जो जावा फाइल इस के साथ संपादित करने के लिए? – Purus

+0

मैंने अपनी कक्षा विस्तारित टुकड़े पर डेस्ट्राय() विधि संपादित की। मेरी कक्षा WebView बनाते हैं और इसे कुशल बनाते हैं। – ilyamuromets

+0

क्या आप मुझे अपना उदाहरण कोड भेज सकते हैं ताकि मैं यहां एक अच्छा रेपो केस प्राप्त कर सकूं? मैं एक अच्छा जुनीट टेस्ट केस प्राप्त करना चाहता हूं, और इस कोड को सीधे कॉर्डोवा एंड्रॉइड/कॉर्डोवाइंटरफेस ऑन डेस्ट्राय में खींचें –

2

आप अपवाद निगल सकते हैं? इस फ़ाइल को संपादित करें:

/platforms/android/CordovaLib/src/org/apache/cordova/engineChange/SystemWebViewEngine.java

और यह

webView.setNetworkAvailable(value); 
इस

import java.lang.NullPointerException; 
... 
try { 
    webView.setNetworkAvailable(value); 
} 
catch (NullPointerException e) { 
    Log.d(TAG, "webView.setNetworkAvailable called after destroy"); 
} 

नहीं वास्तव में करने के लिए

एक समाधान बदलने के लिए, लेकिन स्थानीय स्तर पर प्रजनन कार्य में कठिनाई को देखते हुए, यह एक विकल्प हो सकता है विचार करने के लिए।

0

मेरा समाधान SystemWebViewEngine.java में था।

  1. परिवर्तन protected final SystemWebView webView; करने के लिए protected SystemWebView webView;

  2. destroy() विधि में

    के बाद

if (receiver != null) { try { webView.getContext().unregisterReceiver(receiver); } catch (Exception e) { Log.e(TAG, "Error unregistering configuration receiver: " + e.getMessage(), e); } }

जोड़ने

webView = null;

  1. if (webView != null) webView.setNetworkAvailable(value);

संबंधित मुद्दे