2014-10-08 93 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(); 
     } 
}); 

不要訴諸於改變當前活動的佈局。相反,創建一個新的活動並打開包含新佈局的活動。