2012-04-19 89 views
-1

選擇一個菜單項後,我試圖顯示一個自定義對話框,但是當我設置onClickListener(工作正常,沒有onClickListner)時,顯示一個空指針錯誤。我檢查按鈕ID錯別字,一切都是正確的。爲什麼我得到一個空指針錯誤?

任何想法爲什麼?

public void unlinkDeviceClick(MenuItem item){ 

    final Dialog alertDiag = new Dialog(Home.this); 
    alertDiag.setContentView(R.layout.unlinkdialog); 
    alertDiag.setTitle("Unlink Device"); 

    Button yes = (Button)findViewById(R.id.signout); 
    Button cancel = (Button)findViewById(R.id.cancelsignout); 


    final EditText usernameField = (EditText)findViewById(R.id.usernameField); 
    final EditText passwordField = (EditText)findViewById(R.id.passwordField); 
    final TextView descr = (TextView)findViewById(R.id.unlinkresults);  


    yes.setOnClickListener(new OnClickListener(){ 

     public void onClick(View v) { 
     // TODO Auto-generated method stub 
     String userName = usernameField.getText().toString(); 
     String password = passwordField.getText().toString(); 

     if(checkLoginFields(userName,password)){   
      if(checkCredentials(userName,password)){ 
       //loadUnlink(); 
       descr.setText("Sucessfully unlinked"); 
      } 
      else{ 
       showWrongInfo(new View(Home.this)); 
      } 
     } 
     else{ 

     } 

     } 

    }); 


    cancel.setOnClickListener(new OnClickListener(){ 

     public void onClick(View v) { 
     // TODO Auto-generated method stub 
      alertDiag.dismiss(); 
     } 

    }); 


    alertDiag.show(); 
} 

////////////////////// Stack trace /////////////////// ///////////////////

04-19 10:30:32.198: E/AndroidRuntime(20386): FATAL EXCEPTION: main 
04-19 10:30:32.198: E/AndroidRuntime(20386): java.lang.RuntimeException: java.lang.reflect.InvocationTargetException 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.MenuInflater$InflatedOnMenuItemClickListener.onMenuItemClick(MenuInflater.java:203) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:154) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:964) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.view.menu.MenuBuilder$ActionMenuAdapter$1.onClick(MenuBuilder.java:1565) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.View.performClick(View.java:3135) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.View.onKeyUp(View.java:5055) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.KeyEvent.dispatch(KeyEvent.java:2623) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.View.dispatchKeyEvent(View.java:4603) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1157) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.widget.ListView.dispatchKeyEvent(ListView.java:2061) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1159) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.policy.impl.tv.TvWindow$DecorView.superDispatchKeyEvent(TvWindow.java:1161) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.policy.impl.tv.TvWindow.superDispatchKeyEvent(TvWindow.java:803) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.app.Dialog.dispatchKeyEvent(Dialog.java:706) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.policy.impl.tv.TvWindow$DecorView.dispatchKeyEvent(TvWindow.java:1117) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2902) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewRoot.deliverKeyEvent(ViewRoot.java:2860) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.ViewRoot.handleMessage(ViewRoot.java:2059) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.os.Handler.dispatchMessage(Handler.java:99) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.os.Looper.loop(Looper.java:132) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.app.ActivityThread.main(ActivityThread.java:4083) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at java.lang.reflect.Method.invokeNative(Native Method) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at java.lang.reflect.Method.invoke(Method.java:491) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at dalvik.system.NativeStart.main(Native Method) 
04-19 10:30:32.198: E/AndroidRuntime(20386): Caused by: java.lang.reflect.InvocationTargetException 
04-19 10:30:32.198: E/AndroidRuntime(20386): at java.lang.reflect.Method.invokeNative(Native Method) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at java.lang.reflect.Method.invoke(Method.java:491) 
04-19 10:30:32.198: E/AndroidRuntime(20386): at android.view.MenuInflater$InflatedOnMenuItemClickListener.onMenuItemClick(MenuInflater.java:199) 
04-19 10:30:32.198: E/AndroidRuntime(20386): ... 30 more 
04-19 10:30:32.198: E/AndroidRuntime(20386): Caused by: java.lang.NullPointerException 
04-19 10:30:32.198: E/AndroidRuntime(20386): at com.ameba.api.activityClasses.Home.unlinkDeviceClick(Home.java:604) 
04-19 10:30:32.198: E/AndroidRuntime(20386): ... 33 more 
+3

郵政全堆棧跟蹤。 – kosa 2012-04-19 15:34:58

+1

我的猜測是因爲'findViewById(R.id.signout)'返回'null'? – maksimov 2012-04-19 15:35:45

+0

發佈堆棧跟蹤 – Fabii 2012-04-19 15:37:45

回答

5

如果按鈕yescancel是在對話框中,你會想在搜索它們您設置的對話框佈局:

Button yes = (Button) alertDialog.findViewById(R.id.signout); 
Button cancel = (Button) alertDialog.findViewById(R.id.cancelsignout); 
+0

我不確定你的意思,我創建了自己的自定義對話框xml有兩個按鈕是和取消 – Fabii 2012-04-19 15:42:59

+0

你的意思是這樣的:dialog.findViewById(R .id.signout)? – Fabii 2012-04-19 15:44:53

+1

@Fabii你的按鈕只存在於你在'R.layout.unlinkdialog'對話框中設置的佈局。如果你使用'findViewById()',你將在當前活動佈局中搜索它們你肯定不會找到它們並且有'NullPointerException',你必須在對話框對象上使用'findViewById',在那裏你設置包含你的按鈕的佈局 – Luksprog 2012-04-19 15:46:50

0

沒有CallStack,很難說。其中一個想法,也許你用findViewById獲得的小部件是空的。

最好的辦法是檢查調用堆棧,以確定它是否爲Yes按鈕或取消按鈕,使錯誤或最好使用斷點並逐步通過代碼找出缺少的內容。

+0

發佈堆棧跟蹤 – Fabii 2012-04-19 15:43:26