2017-03-01 115 views
-1

我創建了一個DialogFragment。 對話框有一個EditText,我從對話框xml調用它。 但有錯誤:嘗試上的空對象引用調用虛擬方法android.text.Editable android.widget.EditText.getText()'嘗試調用空對象引用錯誤上的虛擬方法'android.text.Editable android.widget.EditText.getText()'

在這個新的代碼:

AlertDialog alertDialog; 
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

final EditText editText = (EditText) alertDialog.findViewById(R.id.editTextPasswordDeveloper); 

我的代碼:

public class DeveloperLoginDialogFragment extends DialogFragment { 

EditText editText; 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 

    final LayoutInflater inflaterDialog = getActivity().getLayoutInflater(); 

    AlertDialog alertDialog; 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 

    alertDialog = builder.create(); 

    // final AlertDialog alertDialog = new AlertDialog.Builder(getActivity()); 
    builder.setCancelable(false); 
    builder.setView(inflaterDialog.inflate(R.layout.alertdialog_developer, null)); 
    final EditText editText = (EditText) alertDialog.findViewById(R.id.editTextPasswordDeveloper); 
    builder.setTitle("Entwickler-Login"); 
    builder.setMessage("Um dich als Entwickler zu verifizieren, gib den Entwickler-Code bitte unten ein."); 
    builder.setPositiveButton("Verifizieren", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if(editText.getText().toString().equals("7846")) { 
       dialog.dismiss(); 
       Toast.makeText(getActivity().getApplicationContext(),"Erfolgreich verifiziert!", Toast.LENGTH_LONG).show(); 
      } 
     } 
    }); 
    builder.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      Intent intent = new Intent(getActivity(), MainActivity.class); 
      startActivity(intent); 
     } 
    }); 
    return builder.create(); 
} 

}

+1

在爲對象分配任何值之前,您正在對對象調用findViewById。也許你想將'inflaterDialog.inflate'的值賦給View變量,然後執行'view.findViewById' – Sourabh

回答

1

問題很簡單,您正在使用編輯文本來查找視圖。你有兩個選項,要麼膨脹佈局,然後使用findViewById或使用alertDialog.findViewById();

試試這個。

AlertDialog.Builder builder = new AlertDialog.Builder(FeedFragment.this.getActivity()); 
    builder.setView(R.layout.layout_edit_review); 
    builder.setCancelable(true); 
    Dialog dialog = builder.create(); 
    dialog.show(); 
    TextInputEditText text_edit = (TextInputEditText) dialog.findViewById(R.id.editReview); 

嘗試類似的東西。

+0

謝謝!但現在它說:嘗試調用虛擬方法'android.text.Editable android.widget.EditText.getText()'null對象引用 –

+0

首先爲builder.set設置視圖findViewById – Remario

+0

這是因爲.getText( ) –

0

editText = (EditText) editText.findViewById(R.id.editTextPasswordDeveloper);

要調用findViewById()editText這是空。您可能需要使用EditText editText = (EditText) alertDialog.findViewById(R.id.label_field);。請注意使用alertDialog而不是editText