对话框中的NullPointerException - Android

时间:2013-02-13 23:21:28

标签: java android dialog nullpointerexception

我正在尝试实施一个dialog框,以便在单击按钮时显示。我按照一个示例来获取以下代码,因为我以前从未使用过dialogs。我在Results课程的2个不同地点获得NPE。我在下面的代码中评论了两个位置。

先谢谢你的帮助。

Java代码:

public class Results extends Activity {

    Button detailsBtn;
    final Context context = this;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.resultsmain);

        detailsBtn = (Button)findViewById(R.id.detailsBtn);
        detailsBtn.setText("Details");

        detailsBtn.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {

                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.resultsdetailsdisplay);
                dialog.setTitle("Detailssss");

                TextView title = (TextView)findViewById(R.id.title);
                title.setText("TITLE - TESTING");  //NULL POINTER EXCEPTION

                Button close = (Button)findViewById(R.id.close);

                close.setOnClickListener(new OnClickListener() {  //NULL POINTER EXCEPTION
                    public void onClick(View arg0) {
                        dialog.dismiss();
                    }
                });
            }
        });
    }
}

resultsdetailsdisplay.xml:

<RelativeLayout 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/scroll" >

    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp"
        android:layout_centerHorizontal="true"
        android:gravity="center" />
</RelativeLayout>

LogCat输出

02-13 18:36:39.900: E/AndroidRuntime(767): java.lang.NullPointerException
02-13 18:36:39.900: E/AndroidRuntime(767):  at matt.lyons.bibletrivia.Results$4.onClick(Results.java:85)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.view.View.performClick(View.java:4084)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.view.View$PerformClick.run(View.java:16966)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.os.Handler.handleCallback(Handler.java:615)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.os.Looper.loop(Looper.java:137)
02-13 18:36:39.900: E/AndroidRuntime(767):  at android.app.ActivityThread.main(ActivityThread.java:4745)
02-13 18:36:39.900: E/AndroidRuntime(767):  at java.lang.reflect.Method.invokeNative(Native Method)
02-13 18:36:39.900: E/AndroidRuntime(767):  at java.lang.reflect.Method.invoke(Method.java:511)
02-13 18:36:39.900: E/AndroidRuntime(767):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-13 18:36:39.900: E/AndroidRuntime(767):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-13 18:36:39.900: E/AndroidRuntime(767):  at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:3)

使用对话框对象:

TextView title = (TextView) dialog.findViewById(R.id.title);

Button close = (Button) dialog.findViewById(R.id.close);

根据指定here findViewById - 查找由onCreate(Bundle)中处理的XML中的id属性标识的视图。

您的对话框在事后加载,因此只有对话框上下文知道这些视图。

答案 1 :(得分:1)

TextView tv = (TextView)dialog.findViewById(R.id.title);

Button close = (Button)dialog.findViewById(R.id.close);

在上面的xml中,您还没有创建button

答案 2 :(得分:0)

这两个问题都是由同一种方法findViewById(R.id.something)引起的。由于您尝试从外部类(即OnClickListener)引用您的视图,因此无法直接使用findViewById。相反,你可以使用,例如,

Results.this.findViewById(R.id.title);

希望它有效!