2012-04-26 9 views
0

次のonCreateメソッドでFragmentActivityが発生しました。このメソッドは、Android 2.1以降を使用しているモバイルデバイスでクラッシュするようです。このエラーの原因となる可能性のあるアイデアはありますか?Android 2.1以下でアプリケーションがクラッシュする(NullPointer Exception)

この活動が開始されたときにスローされる例外:

04-25 20:00:41.834: E/AndroidRuntime(381): Uncaught handler: thread main exiting due to uncaught exception 
04-25 20:00:41.877: E/AndroidRuntime(381): java.lang.NullPointerException 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.widget.TabHost.dispatchWindowFocusChanged(TabHost.java:295) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:661) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:661) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:661) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:661) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.view.ViewRoot.handleMessage(ViewRoot.java:1819) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.os.Looper.loop(Looper.java:123) 
04-25 20:00:41.877: E/AndroidRuntime(381): at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-25 20:00:41.877: E/AndroidRuntime(381): at java.lang.reflect.Method.invokeNative(Native Method) 
04-25 20:00:41.877: E/AndroidRuntime(381): at java.lang.reflect.Method.invoke(Method.java:521) 
04-25 20:00:41.877: E/AndroidRuntime(381): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-25 20:00:41.877: E/AndroidRuntime(381): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-25 20:00:41.877: E/AndroidRuntime(381): at dalvik.system.NativeStart.main(Native Method) 

そして、私のFragmentTabsクラスの一部

public class FragmentTabs extends SherlockFragmentActivity 
{ 
protected static final int RESULT_CLOSE_APPLICATION = 666; 
protected static final int RESULT_RESET_USER = 667; 
LoginController loginControl; 
Context ctx; 
Fragment lastFragment; 
int initRun; 
boolean isRoot; 

/** 
* Decklare tabs and associate them with their respective initial fragments. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.fragment_tabs); 
    ActionBar bar = getSupportActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    bar.setDisplayShowHomeEnabled(false); 
    bar.setDisplayShowTitleEnabled(false); 
    ActionBar.Tab tabA = bar.newTab().setText("Forside"); 
    ActionBar.Tab tabB = bar.newTab().setText("Indstil"); 
    ActionBar.Tab tabC = bar.newTab().setText("Mere"); 

    tabA.setTabListener(new MyTabsListener(new FrontpageFragment())); 
    tabB.setTabListener(new MyTabsListener(new SettingsFragment())); 
    tabC.setTabListener(new MyTabsListener(new MoreFragment())); 

    bar.addTab(tabA); 
    bar.addTab(tabB); 
    bar.addTab(tabC); 

} 

私は答えを試みたがhereを提供するが、私は解決策が適用されるとは思いません私のアプリ。私はそれが "タブバー"に関連していると思う。

+0

あなたはこれを理解したことがありますか?私も同じ問題があります。 2.2以上で正常に動作しますが、2.1ではクラッシュします。 – Inn0vative1

答えて

0

私は同じ問題があります。

Android 2.1の場合、TabHost.dispatchWindowFocusChangedメソッドは、mCurrentViewのヌル値をまだチェックしていませんでした(AndroidのTabHost.javaから確認されていませんでした)ソースV2.1)

@Override 
public void dispatchWindowFocusChanged(boolean hasFocus) { 
    mCurrentView.dispatchWindowFocusChanged(hasFocus); 
} 

アンドロイド2.2以降では、ヌル値は、このチェックが挿入されている:(TabHost.javaからAndroidのソースV2.2で)なぜ正確

@Override 
public void dispatchWindowFocusChanged(boolean hasFocus) { 
    if (mCurrentView != null){ 
     mCurrentView.dispatchWindowFocusChanged(hasFocus); 
    } 
} 

ここではmCurrentViewはnullですがわかりません。しかし、これは少なくともAndroid 2.1では2.2および2.2ではなくなぜ発生するのかを少なくとも説明します。

+0

ちなみに、私はこれを2.2デバイス(少なくともSamsung Galaxy S i9000以上)でも実現しています。他に誰もこれに気づいたのですか? – hiltym

+0

また、2.2とi9000でそれを見る –

4

Androidで提供されるTabHostを拡張し、mCurrentViewがnullであることを確認し、レイアウトxmlで拡張クラスを参照することができます。

FixedTabHost.java:

package org.test.view; 
public class FixedTabHost extends TabHost{ 

    public FixedTabHost(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

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

    @Override 
    public void dispatchWindowFocusChanged(boolean hasFocus) { 
     // API LEVEL <7 occasionally throws a NPE here 
     if(getCurrentView() != null){ 
      super.dispatchWindowFocusChanged(hasFocus); 
     } 

    } 

} 

layout.xml:

<org.test.view.FixedTabHost 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

</org.test.view.FixedTabHost> 

xmlタグがあなたのFixedTabHost.javaのパッケージが含まれていることを確認してください!

関連する問題