NullPointerException:DialogAlert 中的 EditText

NullPointerException: EditText in DialogAlert

我在 DialogAlert 中使用 EditText 得到了 NullPointerException。我的代码如下所示:

        public class MainActivity extends ActionBarActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        WelcomeDialog();
        }

            public Dialog WelcomeDialog() {

                AlertDialog.Builder builder = new AlertDialog.Builder(this);

                builder.setTitle("Server");
                builder.setMessage("Enter ADDRESS and PORT:");
                // Get the layout inflater
                LayoutInflater inflater = this.getLayoutInflater();
                // Pass null as the parent view because its going in the dialog layout
                View v = inflater.inflate(R.layout.dialog_welcome, null);
                builder.setView(v);
                // Use an EditText view to get user input.
                final EditText input1 = new EditText(this);
                input1.setId(address);
                builder.setView(input1);
                final EditText ETaddress = (EditText) v.findViewById(address);

                final EditText input2 = new EditText(this);
                input2.setId(port);
                builder.setView(input2);
                final EditText ETport = (EditText) v.findViewById(port);
                builder.setView(v)
                // Inflate and set the layout for the dialog
                        // Add action buttons
                        .setPositiveButton("connect", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                // The NULLPOINTER is in this line:
                                String str1 = ETaddress.getText().toString();
                                ((VariableHolder) getApplication()).setADDRESS(str1);
                                int str2 = Integer.parseInt(ETport.getText().toString());
                                ((VariableHolder) getApplication()).setPORT(str2);
                                set = true;

                            }
                        });
                builder.create().show();
                return builder.create();
            }
      }
}

我怀疑问题出在这里(错误的声明或类似的东西):

            final EditText input1 = new EditText(this);
            input1.setId(address);
            builder.setView(input1);
            final EditText ETaddress = (EditText) v.findViewById(address);

...但我无法弄清楚出了什么问题。有什么想法吗?

编辑:

这是 logcat 输出:

> 01-06 19:40:28.241    4694-4694/com.example.console2
> E/AndroidRuntime﹕ FATAL EXCEPTION: main
>     java.lang.NullPointerException
>             at com.example.MainActivity.onClick(MainActivity.java:88)
>             at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
>             at android.os.Handler.dispatchMessage(Handler.java:99)
>             at android.os.Looper.loop(Looper.java:137)
>             at android.app.ActivityThread.main(ActivityThread.java:4611)
>             at java.lang.reflect.Method.invokeNative(Native Method)
>             at java.lang.reflect.Method.invoke(Method.java:511)
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
>             at dalvik.system.NativeStart.main(Native Method)

该 v 视图不包含您的编辑文本,因此 v.findViewById(address) 将 return 仅为 null。

试试这个,

http://www.mkyong.com/android/android-prompt-user-input-dialog-example/

如果您怀疑其中存在问题,请执行下一步! 1 全部删除最终修饰符! 2 像这样

setContentView(R.layout.activity_main); 之后找到他们的观点
public class MainActivity extends ActionBarActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     EditText input1 = new (EditText)findViewById(R.id.yourEditTextId);
     EditText ETaddress = (EditText)findViewById(R.id.yourEditTextId);

然后做剩下的事!

好吧,这是一个愚蠢的错误。只忘记地址分别端口前的R.id

final EditText ETaddress = (EditText)v.findViewById(R.id.address); // R.id. !!!