活动崩溃似乎没有理由? -Android

时间:2013-08-19 07:54:46

标签: android android-activity

以下是我的整个活动, 基本上我只传递两个意图,一个发送到textview,另一个作为标题。 然后我在下面有一个切换全屏功能,100%工作。

我似乎无法弄清楚问题所在。但是我最近做了一些重大更改,之后当我尝试时,活动无法启动,应用程序崩溃。

我有很多活动,我现在发现Eclipse为菜单文件夹中的每个活动创建了settings_menu布局。除了这一项活动外,我不需要使用它们。 假设我总共有15个活动,我删除了除此之外的所有其他活动的14个XML设置菜单文件(Xtxt)。

但在删除所有这些之后,该应用仍然有效。现在我对设置内容进行了一些更改,只需单击菜单按钮时显示的文本。

我似乎无法确定问题。因此,下面是我的整个活动,并且低于该错误的LogCat输出。

public class Xtxt extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = (TextView) findViewById(R.id.xxtt);
        setContentView(R.layout.xtxt);
        toggleFullscreen(true);
        Intent intent = getIntent();
        String svar1 = intent.getExtras().getString("a");
        String svar2 = intent.getExtras().getString("b");
        this.setTitle(svar2);
        textView.setText(svar1);

    }

    private void toggleFullscreen(boolean fullscreen) {
        WindowManager.LayoutParams attrs = getWindow().getAttributes();
        if (fullscreen) {
            attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        } else {
            attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
        }
        getWindow().setAttributes(attrs);
    }

}

这是LogCat:

08-19 13:22:20.398: E/ActivityThread(31873): Failed to find provider info for com.google.plus.platform
08-19 13:22:20.406: E/AndroidRuntime(31873): FATAL EXCEPTION: main
08-19 13:22:20.406: E/AndroidRuntime(31873): java.lang.RuntimeException: Unable to start activity ComponentInfo{x.abcd/x.abcd.Xtxt}: java.lang.NullPointerException
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2077)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread.access$600(ActivityThread.java:134)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.os.Looper.loop(Looper.java:154)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread.main(ActivityThread.java:4624)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at java.lang.reflect.Method.invokeNative(Native Method)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at java.lang.reflect.Method.invoke(Method.java:511)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at dalvik.system.NativeStart.main(Native Method)
08-19 13:22:20.406: E/AndroidRuntime(31873): Caused by: java.lang.NullPointerException
08-19 13:22:20.406: E/AndroidRuntime(31873):    at x.abcd.Xtxt.onCreate(Xtxt.java:27)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.Activity.performCreate(Activity.java:4479)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
08-19 13:22:20.406: E/AndroidRuntime(31873):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041)
08-19 13:22:20.406: E/AndroidRuntime(31873):    ... 11 more

我尝试撤消删除,甚至在恢复那些删除的菜单文件后,我似乎仍然有这个奇怪的Null指针错误。我错过了什么吗?

怎么了?

请帮助。

2 个答案:

答案 0 :(得分:5)

在初始化视图之前,您的setContentView应该先出现。

替换此

  TextView textView = (TextView) findViewById(R.id.xxtt);
  setContentView(R.layout.xtxt);  

通过

  setContentView(R.layout.xtxt);
  TextView textView = (TextView) findViewById(R.id.xxtt);
onCreate

中的

您可以findViewById设置为活动的当前视图层次结构。由于您尚未将布局设置为活动,因此findViewById失败。由于这个原因,你可能会得到NUllPointerException

编辑:

最好在onCreate中初始化您的观点,因为在活动的生命周期内调用一次。

从文档引用

http://developer.android.com/reference/android/app/Activity.html

onCreate(Bundle)是您初始化活动的地方。最重要的是,在这里,您通常会使用定义UI的布局资源调用setContentView(int),并使用findViewById(int)检索该UI中需要以编程方式进行交互的小部件。

答案 1 :(得分:0)

    TextView textView = (TextView) findViewById(R.id.xxtt);
    setContentView(R.layout.xtxt);

- >

    setContentView(R.layout.xtxt); 
    TextView textView = (TextView) findViewById(R.id.xxtt);