2014-10-08 90 views
-1
10-07 20:12:34.055 10098 10098 W dalvikvm          threadid=1: thread exiting with uncaught exception (group=0x40c68930) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        FATAL EXCEPTION: main 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Darth377Apps.FrenchCommands/com.Darth377Apps.FrenchCommands.MainActivity}: java.lang.NullPointerException 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread.access$600(ActivityThread.java:141) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.os.Handler.dispatchMessage(Handler.java:99) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.os.Looper.loop(Looper.java:137) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread.main(ActivityThread.java:5041) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at java.lang.reflect.Method.invokeNative(Native Method) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at java.lang.reflect.Method.invoke(Method.java:511) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at dalvik.system.NativeStart.main(Native Method) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        Caused by: java.lang.NullPointerException 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at com.Darth377Apps.FrenchCommands.MainActivity.onCreate(MainActivity.java:28) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.Activity.performCreate(Activity.java:5104) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
10-07 20:12:34.062 10098 10098 E AndroidRuntime        ... 11 more Catalog: 

gob1.setOnClickListener(新View.OnClickListener(){崩溃问题与onClickListener

   @Override 
       public void onClick(View p1) 
       { 
        //setContentView(R.layout.main); 
       } 
      }); 
     gob2.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View p1) 
       { 
        //setContentView(R.layout.main);//change to play when finished 
       } 
      }); 
     lb.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View p1) 
       { 
        //setContentView(R.layout.learn); 
       } 
      }); 
     plb.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View p1) 
       { 
        //setContentView(R.layout.main);//change to play 
       } 
      }); 
     prb.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View p1) 
       { 
        //setContentView(R.layout.main);//change to project 
       } 
      });I have identified an issue in the app I have been developing. 

我每次打开应用程序,它会与一个运行时错误崩溃。

我有缩小代码以找到引起崩溃的部分 请注意,它在使用和不使用setContentView线时崩溃。

+0

呵呵,对于'gob1.setOnClickListener(new View.OnClickListener(){')以及''我在应用程序中发现了一个问题,我一直在开发中'的格式错误抱歉 – Darth377 2014-10-08 00:05:28

+2

您可以发布堆栈跟踪错误?哪条线特别抱怨? – Mike 2014-10-08 00:07:42

+2

除了在'onCreate'方法中设置布局时,除了调用'setContentView'不是一个明智的选择。为什么不用这个布局来创建一个新的活动呢? – Razgriz 2014-10-08 00:07:44

回答

0

在您的onCreate()方法中,确保t您可以设置合适的布局文件,其中包含要将onClickListener附加到的按钮。这样做:

Button button1; 

public void onCreate(Bundle savedInstanceState){ 
    setContentView(R.layout.main); 
    gob1 = (Button)findViewById(R.id.gameoverButton1); 
} 

现在,你必须确保gameoverButton1在你main.xml文件。 setContentView的工作方式是,它将xml文件作为活动的布局加载。一旦加载,您只能分配main.xml中的按钮/ textViews/editTexts,如果gameoverButton1不在该xml文件中,那么Android将不会看到该按钮并且无法初始化gob1,因为gob1gob1会进一步调用nullPointerException未正确初始化。您只能使用您在setContentView方法中加载的xml文件中的视图。您无法将某个xml文件加载为布局,然后决定创建按钮并从不同的xml文件分配这些按钮ID。

你为什么通过调用setContentView来设置布局取决于哪个按钮被点击?不建议多次拨打setContentView。在您的onCreate()方法中调用setContentView来设置布局。再次调用它来完全加载新的布局将会使您所做的任何按钮/ textView/editText分配失效,因为当您更改布局时,这些视图将不再存在。

你可以做的反而是为你创造让每个新布局的新的活动,这样做:

button.setOnClickListener(new View.OnClickListener(){ 

     @Override 
     public void onClick(View p1) 
     { 
      Intent intent = new Intent(this, newActivity.java); 
      startActivity(intent); 
      finish(); 
     } 
}); 

不要诉诸于改变当前活动的布局。相反,创建一个新的活动并打开包含新布局的活动。