2011-10-03 86 views
1

一些外出應用程序的用戶正在抱怨nullpointerexception,這似乎只發生在他們身上(HTC Desire,最新的Android 2.3?),但在其他設備上無法再現。我有點困惑,可能是什麼來源。NPE設置能見度

任何想法?

java.lang.NullPointerException 

android.webkit.WebView.navHandledKey(WebView.java:9290) 
android.webkit.WebView.requestFocus(WebView.java:7847) 
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1131) 
android.view.ViewGroup.requestFocus(ViewGroup.java:1087) 
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1131) 
android.view.ViewGroup.requestFocus(ViewGroup.java:1087) 
android.view.View.requestFocus(View.java:3718) 
android.view.View.requestFocus(View.java:3696) 
android.view.ViewRoot.focusableViewAvailable(ViewRoot.java:1785) 
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470) 
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470) 
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470) 
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470) 
android.view.View.setFlags(View.java:4680) 
android.view.View.setVisibility(View.java:3163) 
at com.ichi2.anki.Reviewer.fillFlashcard(Reviewer.java:2282) 

的代碼看起來像這樣:

private FrameLayout mCardContainer; 
... 
mCardContainer = (FrameLayout) findViewById(R.id.flashcard_frame); 
... 
mCardFrame = (FrameLayout) findViewById(R.id.flashcard); 
mCardFrame.removeAllViews(); 
mCard = createWebView(); 
mCardFrame.addView(mCard); 
... 
mCardContainer.setVisibility(View.VISIBLE); --> 2282 
... 
... 
private WebView createWebView() { 
    WebView webView = new MyWebView(this); 
    webView.setWillNotCacheDrawing(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    if (mZoomEnabled) { 
     webView.getSettings().setBuiltInZoomControls(true); 
    } 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebChromeClient(new AnkiDroidWebChromeClient()); 
    webView.addJavascriptInterface(new JavaScriptInterface(), "interface"); 
    if (Integer.parseInt(android.os.Build.VERSION.SDK) > 7) { 
     webView.setFocusableInTouchMode(false); 
    } 
    mScaleInPercent = webView.getScale(); 
    return webView; 
} 
... 
class MyWebView extends WebView { 

    public MyWebView(Context context) { 
     super(context); 
    } 

    @Override 
    public boolean onCheckIsTextEditor() { 
     return true; 
    } 
} 

的根據XML文件看起來像這樣:

... 
<FrameLayout android:id="@+id/flashcard_frame" 
    android:layout_margin="3dip" 
    android:layout_below="@+id/top_bar" 
    android:layout_above="@+id/answer_nextTime_layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <FrameLayout android:id="@+id/flashcard" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent">    
     <FrameLayout android:id="@+id/touch_layer" 
      android:layout_marginTop="20dip" 
      android:longClickable="true" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
    </LinearLayout> 
    <FrameLayout android:id="@+id/whiteboard" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
    <ImageView android:id="@+id/lookup_button" 
     android:padding="5dip" 
     android:layout_gravity="right" 
     android:src="@drawable/ic_lookup" 
     android:visibility="gone" 
     android:clickable="true" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 
    <FrameLayout android:id="@+id/flashcard_border" 
     android:visibility="gone" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"/> 
</FrameLayout> 

...

+1

你也可以發佈你的XML佈局文件,其中包含此FrameLayout – hooked82

+0

是的,詛咒,我加了它 – nob

+0

WebView從哪裏來?我沒有在XML中看到它。 – kichik

回答

0

是線:

mCardContainer = (FrameLayout) findViewById(R.id.flashcard_frame); 
mCardContainer.setVisibility(View.VISIBLE); --> 2282 

打電話給setContentView(R.layout.your_proper_layout_resource);

+0

yes:setContentview(R.layout.flashcard) – nob