6

运行我的基本应用程序时收到以下错误消息。该应用程序由一个名为 button1 的按钮和一个名为 topLeft 的 textView 组成。

07-01 15:33:02.754: D/AndroidRuntime(2334): Shutting down VM 07-01 15:33:02.754: W/dalvikvm(2334): threadid=1: thread exiting with
uncaught exception (group=0x40a13300) 07-01 15:33:02.984:
E/AndroidRuntime(2334): FATAL EXCEPTION: main 07-01 15:33:02.984:
E/AndroidRuntime(2334): java.lang.RuntimeException: Unable to instantiate activity
ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.MainActivity}:
java.lang.NullPointerException 07-01 15:33:02.984:
E/AndroidRuntime(2334): at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1983)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.access$600(ActivityThread.java:130) 07-01
15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.os.Handler.dispatchMessage(Handler.java:99) 07-01
15:33:02.984: E/AndroidRuntime(2334): at android.os.Looper.loop(Looper.java:137) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at android.app.ActivityThread.main(ActivityThread.java:4745) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invokeNative(Native Method) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.reflect.Method.invoke(Method.java:511) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-01 15:33:02.984: E/AndroidRuntime(2334): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 07-01
15:33:02.984: E/AndroidRuntime(2334): at dalvik.system.NativeStart.main(Native Method) 07-01 15:33:02.984:
E/AndroidRuntime(2334): Caused by: java.lang.NullPointerException
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.Activity.findViewById(Activity.java:1825) 07-01
15:33:02.984: E/AndroidRuntime(2334): at com.example.myfirstapp.MainActivity.<init>(MainActivity.java:28) 07-01
15:33:02.984: E/AndroidRuntime(2334): at java.lang.Class.newInstanceImpl(Native Method) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at java.lang.Class.newInstance(Class.java:1319) 07-01 15:33:02.984:
E/AndroidRuntime(2334): at android.app.Instrumentation.newActivity(Instrumentation.java:1053)
07-01 15:33:02.984: E/AndroidRuntime(2334): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1974)
07-01 15:33:02.984: E/AndroidRuntime(2334):     ... 11 more

尝试使用findViewById时,出现此错误,参考第 28 行。

该程序如下所示:

package com.example.myfirstapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{

    int a = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
      return true;
    }


    Button button1 = (Button) findViewById(R.id.button1);
    TextView topLeft = (TextView) findViewById(R.id.textView2);
//  button1.setOnClickListener( this );

    public void onClick(View v) {
        // TODO Auto-generated method stub

    }    

}

这是什么意思?为什么我的代码在引用 R.java 文件时遇到问题?

R.java does have
    public static final class id {
        public static final int button1=0x7f080001;
        public static final int menu_settings=0x7f080003;
        public static final int textView1=0x7f080000;
        public static final int textView2=0x7f080002;

提前致谢。

4

1 回答 1

16

您正在调用findViewById作为字段定义的一部分,此时布局不会膨胀(当您调用 时会发生这种情况setContentView)。findViewById没有找到视图,所以参考被设置为null.

将您的findViewById电话移到onCreate, 调用后setContentView应该可以解决它。

于 2012-07-01T20:49:31.670 回答