1

在我的 longCLick 应用程序中,我通过这种方法创建了 AlertDialog:

     @Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_TEXT_ENTRY:
        // This example shows how to add a custom layout to an AlertDialog
        LayoutInflater factory = LayoutInflater.from(this);
        final View textEntryView = factory.inflate(R.layout.custom_dialog, null);
        final EditText cdet11 = (EditText) findViewById(R.id.cdet1);
        final TextView tv11 = (TextView) findViewById(R.id.buname1);
        return new AlertDialog.Builder(Main.this)
            .setIcon(R.drawable.icon)
            .setTitle("Title")
            .setView(textEntryView)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    android.os.Debug.waitingForDebugger();
                    String string1 = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getString("butname11", "");
                    String ss1 = cdet11.getText().toString();
                    getSharedPreferences("PREFERENCE", MODE_PRIVATE)
                    .edit()
                    .putString("butname11", ss1 )
                    .commit();
                    String string11 = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getString("butname11", "");
                    tv11.setText(string11);
                    /* User clicked OK so do some stuff */
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {

                    /* User clicked cancel so do some stuff */
                }
            })
            .create();
    }
    return null;
} 

但是,我犯了这样的错误......

10-05 14:54:25.319: E/AndroidRuntime(6331): java.lang.NullPointerException
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.home.Main$3.onClick(Main.java:166)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.os.Looper.loop(Looper.java:144)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at android.app.ActivityThread.main(ActivityThread.java:4937)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at java.lang.reflect.Method.invokeNative(Native Method)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at java.lang.reflect.Method.invoke(Method.java:521)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
10-05 14:54:25.319: E/AndroidRuntime(6331):     at dalvik.system.NativeStart.main(Native Method) 

错误发生在

String ss1 = cdet11.getText().toString(); 

有什么问题?

4

2 回答 2

3

将 View 引用添加到这些,

 final EditText cdet11 = (EditText) findViewById(R.id.cdet1);
        final TextView tv11 = (TextView) findViewById(R.id.buname1);

像这样,

 final EditText cdet11 = (EditText)textEntryView. findViewById(R.id.cdet1);
        final TextView tv11 = (TextView)textEntryView. findViewById(R.id.buname1);

只有当您提供可以找到元素的视图时,android 才会知道在哪里寻找。

如果不是,它会查看您的 Activity 的 ContentView 并抛出 NPE。

于 2012-10-05T11:02:23.210 回答
3

像这样使用

  private void CreateAlertDialog (final String type) {       

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

    alert.setTitle("Title");
    alert.setMessage("Message");

    // Set an EditText view to get user input 
    final EditText input = new EditText(this);
    alert.setView(input);

    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString();

        }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

        }
    });
    alert.show();

}
于 2012-10-05T11:12:33.000 回答