2017-02-02 37 views
-2

我想使AlertDialog彈出並在其中有一個微調器,其中有人可以選擇一個項目,並將該項目保存到變量。然而,當我測試它時,我點擊確定按鈕,應用程序停止,並且在logcat上獲得java.NullPointerException。顯然,Spinner的getSelectedItem()(這是應該得到所選的項目)造成這java.NullPointerException獲取微調器的選定項目,而不會導致java.nullPointerException

導致該NullPointerException異常代碼:

alertDialogBuilder.setView(promptsView); 
        alertDialogBuilder 
          .setCancelable(false) 
          .setPositiveButton("OK", 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog,int id) { 


              final Spinner spinner = (Spinner) findViewById(R.id.LanguagePicker); 
              /*(error is here) -->*/ text = spinner.getSelectedItem().toString(); 



              spinner.setAdapter(adapter); 
              String r = textInput.getText().toString(); 
              allTheTranslatedText = getTranslatedText(r); 
              textOutput.setText(allTheTranslatedText); 
             } 
            }) 
          .setNegativeButton("Cancel", 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
              dialog.cancel(); 
             } 
            }); 
        AlertDialog alertDialog = alertDialogBuilder.create(); 
        alertDialog.show(); 


      } 
     }); 

有沒有什麼建議可以使用檢索Spinner的所選項目沒有導致一個NullPointerException另一種方式?

+0

你有沒有看到以下(意識到它有點過時):http://stackoverflow.com/questions/3264610/findviewbyid-returns-null – michaelok

回答

1

這樣做。

您缺少promptsView.findViewById();

final Spinner spinner =(Spinner)promptsView.findViewById(R.id.LanguagePicker);

View promptsView = LayoutInflator.inflator(......//do it); 
alertDialogBuilder.setView(promptsView); 
        alertDialogBuilder 
          .setCancelable(false) 
          .setPositiveButton("OK", 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog,int id) { 

              //this is the main line 
              final Spinner spinner = (Spinner) promptsView.findViewById(R.id.LanguagePicker); 
              /*(error is here) -->*/ text = spinner.getSelectedItem().toString(); 



              spinner.setAdapter(adapter); 
              String r = textInput.getText().toString(); 
              allTheTranslatedText = getTranslatedText(r); 
              textOutput.setText(allTheTranslatedText); 
             } 
            }) 
          .setNegativeButton("Cancel", 
            new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int id) { 
              dialog.cancel(); 
             } 
            }); 
        AlertDialog alertDialog = alertDialogBuilder.create(); 
        alertDialog.show(); 


      } 
     }); 
相關問題