Issue
I've got a Dialog Box created using the AlertDialog.Builder class, and calling builder.setView(int resource) to give it a custom layout for text entry.
I'm trying to retrieve the values from the EditTexts on the layout when the user hits OK, but when calling findViewByID() I'm getting null references. Reading around it seems that this occurs elsewhere if one attempts to load a View before calling setContentView(). With the Builder I obviously haven't done this, is there a way to retrieve the views or should I be constructing my dialogs a different way?
Java and stack trace below:
// Set up the on click of the Button
Button add = (Button) findViewById(R.id.manage_connections_add_button);
add.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new AlertDialog.Builder(ManageConnectedServicesActivity.this);
builder.setTitle("Add Service");
builder.setView(R.layout.component_sharing_service_dialogue);
// Set up the buttons on the dialog
builder.setPositiveButton("Add", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Get the connected service url
EditText url = (EditText) findViewById(R.id.add_sharing_service_url); // This is the offending line
addConnectedService(url.getText().toString()); // Crashes here
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
builder.show();
}
});
Stack Trace:
12-05 09:54:40.825 1889-1889/uk.mrshll.matt.accountabilityscrapbook E/AndroidRuntime: FATAL EXCEPTION: main
Process: uk.mrshll.matt.accountabilityscrapbook, PID: 1889
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at uk.mrshll.matt.accountabilityscrapbook.ManageConnectedServicesActivity$1$1.onClick(ManageConnectedServicesActivity.java:63)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Solution
Create one view in which inflate the xml file, and use that view before findViewById()
final View view = inflater.inflate(R.layout.schedule,null);
builder.setView(view);
final EditText edtSelectDate = (EditText) view.findViewById(R.id.edtSelectDate);
Answered By - Pankaj Lilan
Answer Checked By - Katrina (JavaFixing Volunteer)