2012-09-07 15 views
6

हर कुछ दिनों में मुझे अपने आवेदन के लिए निम्नलिखित स्टैक ट्रेस या उसके छोटे संस्करणों के साथ एक क्रैश रिपोर्ट मिलती है (विभिन्न एंड्रॉइड संस्करणों के आधार पर विभिन्न लाइन संख्याओं के साथ)

java.lang.NullPointerException at 
WebView.java:8241:in `android.webkit.WebView$PrivateHandler.handleMessage' 
Handler.java:99:in `android.os.Handler.dispatchMessage' 
Looper.java:150:in `android.os.Looper.loop' 
ActivityThread.java:4293:in `android.app.ActivityThread.main' 
Method.java:-2:in `java.lang.reflect.Method.invokeNative' 
Method.java:507:in `java.lang.reflect.Method.invoke' 
ZygoteInit.java:849:in `com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run' 
ZygoteInit.java:607:in `com.android.internal.os.ZygoteInit.main' 
NativeStart.java:-2:in `dalvik.system.NativeStart.main' 

यह विशिष्ट स्टैक एंड्रॉइड 2.3.4 पर एक एचटीसी ईवीओ 3 डी पीजी 86100 डिवाइस पर था। मेरा ऐप कुछ ओथ से संबंधित लॉगिन परिदृश्यों के लिए कई वेबव्यू होस्ट करता है।

मुझे इसे ठीक करने का तरीका जानने के तरीके के बारे में कैसे जाना चाहिए? मैंने स्रोत खोजने के लिए grepcode को देखने का प्रयास किया है, लेकिन मैं एक मेल खाने वाली लाइन संख्या नहीं ढूंढ पा रहा हूं जो समझ में आता है। क्या मेरा ग्रेपोड-फू कमजोर है?

+0

एंड्रॉइड रिलीज या डिवाइस निर्माताओं के लिए कोई पैटर्न? – CommonsWare

+0

दिलचस्प अवलोकन! ऐसा लगता है कि एचटीसी उपकरणों तक ही सीमित है! – PacificSky

+0

मैंने एचटीसी टैग जोड़ा है, क्योंकि एक मौका है कि आपको कुछ एचटीसी सहायता मिलेगी। मुझे लगता है कि आपके पास पुनरुत्पादित परीक्षण केस नहीं है - सही? – CommonsWare

उत्तर

5

मैं हाल ही में इस मुद्दे में भाग गया और मेरे मामले में मैं यह समझने में कामयाब रहा कि एक माध्यमिक बग फिक्स इस मुद्दे का कारण बन रहा था।

तो, यदि आपने कस्टम क्लास नहीं बनाया है जो वेबव्यू बढ़ाता है, तो इस android bug report में एक सुझाव के कारण चेकआईएसटेक्स्ट एडिटर हमेशा सत्य लौटने के लिए ओवरराइड करता है ... मैं यहां पढ़ना बंद कर दूंगा।

यदि आपने ऐसा किया है, तो ऐसा लगता है कि यह फ़िक्स पहले ही एचटीसी द्वारा लागू किया गया है और किसी कारण से इसे फोकस प्राप्त होने पर क्रैश हो जाता है। यह समस्या दृश्य पर स्पर्श घटनाओं को रखकर और दृश्य दृश्यता सेट करके, मेरे लिए दो स्थानों पर प्रकट हुई। मेरी प्रोजेक्ट में मैंने एक वेब व्यू क्लाइंट सेट किया और तब तक इंतजार किया जब तक कि पृष्ठ दृश्यमान दृश्यमान दृश्य को सेट करने से पहले लोड हो गया था। यह निम्न स्टैक ट्रेस की वजह से:

java.lang.NullPointerException at android.webkit.WebView.navHandledKey(WebView.java:9353) 
    at android.webkit.WebView.requestFocus(WebView.java:7910) 
    at android.view.View.requestFocus(View.java:3718) 
    at android.view.View.requestFocus(View.java:3696) 
    at android.view.ViewRoot.focusableViewAvailable(ViewRoot.java:1803) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:474) 
    at android.view.View.setFlags(View.java:4680) 
    at android.view.View.setVisibility(View.java:3163) 

आज़माएं/कैच मैं निर्धारित करने के लिए अगर मैं स्पर्श घटनाओं को ओवरराइड या नहीं करना चाहिए में सक्षम था में setVisibility कॉल लपेटकर द्वारा। अगर मैंने घटना पकड़ी, तो इसका मतलब यह होगा कि मुझे ओवरराइड अक्षम करना चाहिए। यह मैं क्या किया का एक उदाहरण है:

try { 
    webView.setVisibility(View.VISIBLE); 
} catch (NullPointerException e) { 
    Log.i(TAG, "Error setting webview visibility due to overriding focus. It will be disabled."); 
    webView.setOverrideOnCheckIsTextEditor(false); 
    // Confirm window is visible 
    webView.setVisibility(View.VISIBLE); 
} 

मेरे कस्टम वेबव्यू अब इस तरह दिखता है, विशेष ध्यान देने की अंतिम दो तरीकों के लिए भुगतान किया:

/** 
* When using a webview in a dialog, there are issues relating to the keyboard not appearing when focusing on a text box. 
* This overrides a function to ensure the keyboard is shown when focusing on a text box in a webview. 
* See link for bug report and solution. 
* 
* @see http://code.google.com/p/android/issues/detail?id=7189 
* @see http://stackoverflow.com/questions/12325720 
* @author James O'Brien 
* @since 10/16/2012 
*/ 
public class FocusableWebView extends WebView { 

    private boolean mOverrideCheckIsTextEditor = true; 

    /** 
    * Default Constructor 
    * 
    * @param context 
    */ 
    public FocusableWebView(Context context) { 
     super(context); 
    } 

    /** 
    * Default Constructor 
    * 
    * @param context 
    * @param attrs 
    */ 
    public FocusableWebView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    /** 
    * Default Constructor 
    * 
    * @param context 
    * @param attrs 
    * @param defStyle 
    */ 
    public FocusableWebView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public boolean onCheckIsTextEditor() { 
     if (mOverrideCheckIsTextEditor) { 
      return true; 
     } else { 
      return super.onCheckIsTextEditor(); 
     } 
    } 

    /** 
    * Enable/Disable overriding of onCheckIsTextEditor to always return true. 
    */ 
    public void setOverrideOnCheckIsTextEditor(boolean foo) { 
     mOverrideCheckIsTextEditor = foo; 
    } 
} 

खेद है कि मैं के बारे में अधिक विस्तार में जाने नहीं कर सकते यह इस मुद्दे को क्यों हल करता है। सभी मैं मान सकते हैं कि अपने ध्यान केंद्रित करने के लिए संबंधित और गतिशील रूप से अक्षम करने में यह एक इलाज :) काम करता है

** अद्यतन (12/11/12) **

ऊपर प्रस्तुत दोनों मुद्दों को हल करने प्रबंधित। यह वेबव्यू के फोकस के साथ एक मुद्दा प्रतीत होता था। मेरे कोड अब इस

webView.setVisibility(View.VISIBLE); 
webView.setFocusable(true); 
webView.requestFocus(); 

मुझे यकीन है कि आप स्पष्ट रूप से 'सही' या बुला setFocusable (सही) को फ़ोकस करने योग्य विशेषता सेट है कि करने का सुझाव देते हैं की तरह लग रहा है।

+0

पर होता है, मुझे लगता है कि आपका फ़िक्स मूल प्रश्न की तुलना में थोड़ा अलग मुद्दे के लिए है। मैंने जो क्रैश देखा है उसे देखा है (navHandledKey में), इसलिए मुझे लगता है कि आपका फिक्स उस क्रैश को ठीक कर सकता है। हालांकि, मुझे यकीन नहीं है कि मैंने पोस्ट किए गए मूल स्टैक ट्रेस को ठीक किया है (PrivateHandler.handleMessage में क्रैश)। क्या आप पुष्टि कर सकते हैं कि आपने अपने ऐप में क्रैश देखा है और यह आपके फिक्स के बाद चला गया है? – PacificSky

+0

मेरे पास इसी तरह के एचटीसी संस्करण वाले फोन पर एक समान स्टैक ट्रेस था और मैंने पाया कि फोकस ओवरराइड को बंद करने से इस मुद्दे को हल किया गया। मैं समझता हूं, और दूसरे पैराग्राफ में नोट किया गया है कि मेरा फिक्स बल्कि विशिष्ट है, लेकिन मुझे उम्मीद है कि यह वेबव्यू से संबंधित था, फोकस प्राप्त करने से कुछ मदद मिलेगी। – jimmithy

+0

धन्यवाद। मैंने आपका फिक्स लागू कर लिया है। अगर मुझे दोबारा एक ही दुर्घटना दिखाई नहीं दे रही है तो मैं इसे उत्तर के रूप में चिह्नित करूंगा! – PacificSky

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