1

我一直在写这个Android应用程序的过去几天,一切都一直顺利,直到今天。在我的应用程序中,我试图为我的应用程序实现选项卡式视图,但只要我尝试运行它,我的应用程序就会在打开时立即安装并强制关闭。我一直坐在这里一整天,不能在我的生活中找出问题所在。希望有人能帮助我。Android的NullPointerException在OnCreate方法

E/AndroidRuntime(5469): FATAL EXCEPTION: main 
E/AndroidRuntime(5469): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo 
{com.stullich.tim.lolbufftimer/com.stullich.tim.lolbufftimer.LoLBuffTimerMain}: java.lang.NullPointerException 
E/AndroidRuntime(5469):at android.app.ActivityThread.performLaunchActivity 
(ActivityThread.java:1573) 
E/AndroidRuntime(5469): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
E/AndroidRuntime(5469): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
E/AndroidRuntime(5469): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
E/AndroidRuntime(5469): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(5469): at android.os.Looper.loop(Looper.java:130) 
E/AndroidRuntime(5469): at android.app.ActivityThread.main(ActivityThread.java:3691) 
E/AndroidRuntime(5469): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(5469): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(5469): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run 
(ZygoteInit.java:907) 
E/AndroidRuntime(5469): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
E/AndroidRuntime(5469): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(5469): Caused by: java.lang.NullPointerException 
E/AndroidRuntime(5469): at android.content.ContextWrapper.getResources(ContextWrapper.java:80) 
E/AndroidRuntime(5469): at com.stullich.tim.lolbufftimer.LoLBuffTimerMain.<init>(LoLBuffTimerMain.java:14) 
E/AndroidRuntime(5469): at java.lang.Class.newInstanceImpl(Native Method) 
E/AndroidRuntime(5469): at java.lang.Class.newInstance(Class.java:1409) 
E/AndroidRuntime(5469): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
E/AndroidRuntime(5469): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565) 
E/AndroidRuntime(5469):  ... 11 more 

下面是主要活动的代码:

public class LoLBuffTimerMain extends TabActivity{ 

Resources res = getResources(); 
TabHost tabHost = getTabHost(); 
TabHost.TabSpec spec; 
Intent intent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    intent = new Intent().setClass(this, YourBuffs.class); 

    spec = tabHost.newTabSpec("yourbuffs").setIndicator("Your Buffs", 
         res.getDrawable(R.drawable.tab_view_you)) 
        .setContent(intent); 
    tabHost.addTab(spec); 

    intent = new Intent().setClass(this, EnemyBuffs.class); 
    spec = tabHost.newTabSpec("enemybuffs").setIndicator("Enemy Buffs", 
         res.getDrawable(R.drawable.tab_view_enemy)) 
        .setContent(intent); 
    tabHost.addTab(spec); 
    } 
} 

和XML:

<?xml version="1.0" encoding="utf-8"?> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="fill_parent"> 
    <TabWidget android:id="@android:id/tabs" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" /> 
    <FrameLayout android:id="@android:id/tabcontent" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="5dp">   
    </FrameLayout> 
</TabHost> 

回答

5

堆栈跟踪指向该线作为异常的来源:

Resources res = getResources(); 

继承的getResources()方法抛出异常。这是因为在构建和初始化活动之后,您不能直接调用getResources()。将这些成员变量初始化移动到onCreate(),你应该很好。

1

以下不拘一格里面的onCreate

Resources res = getResources(); 
TabHost tabHost = getTabHost(); 
0

来定义我不知道这一点,但我认为你可以做一个getTabHost()你做一个setContentView()之后。否则getTabHost()返回null(这种行为类似于findViewById())。

相关问题