【问题标题】:When i try to show dialog box it gives me FORCE CLOSE error当我尝试显示对话框时,它给了我 FORCE CLOSE 错误
【发布时间】:2013-03-28 06:42:51
【问题描述】:

这是显示我的对话框活动的代码。每当我尝试打开此意图时,我的应用程序都会强制关闭。所以请告诉我代码中的错误。这里是 logcat。

03-28 12:11:36.851:E/AndroidRuntime(681):致命异常:主要 03-28 12:11:36.851:E/AndroidRuntime(681):java.lang.RuntimeException: 无法开始活动 组件信息{com.neelrazin.noteit/com.neelrazin.noteit.Password}: java.lang.NullPointerException 03-28 12:11:36.851: E/AndroidRuntime(681):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 03-28 12:11:36.851: E/AndroidRuntime(681): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 03-28 12:11:36.851: E/AndroidRuntime(681): 在 android.app.ActivityThread.access$1500(ActivityThread.java:117) 03-28 12:11:36.851:E/AndroidRuntime(681):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 03-28 12:11:36.851: E/AndroidRuntime(681): 在 android.os.Handler.dispatchMessage(Handler.java:99) 03-28 12:11:36.851:E/AndroidRuntime(681):在 android.os.Looper.loop(Looper.java:123) 03-28 12:11:36.851: E/AndroidRuntime(681):在 android.app.ActivityThread.main(ActivityThread.java:3683) 03-28 12:11:36.851:E/AndroidRuntime(681):在 java.lang.reflect.Method.invokeNative(Native Method) 03-28 12:11:36.851:E/AndroidRuntime(681):在 java.lang.reflect.Method.invoke(Method.java:507) 03-28 12:11:36.851: E/AndroidRuntime(681):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-28 12:11:36.851: E/AndroidRuntime(681): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 03-28 12:11:36.851:E/AndroidRuntime(681):在 dalvik.system.NativeStart.main(本机方法)03-28 12:11:36.851: E/AndroidRuntime(681):引起:java.lang.NullPointerException 03-28 12:11:36.851:E/AndroidRuntime(681):在 com.neelrazin.noteit.Password.onCreate(Password.java:57) 03-28 12:11:36.851:E/AndroidRuntime(681):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 03-28 12:11:36.851: E/AndroidRuntime(681): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

public class Password extends Activity {

    final Context context = this;
     public Long mRowId;
     private NotesDbAdapter mDbHelper;
     String password;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.password);


        mRowId = (savedInstanceState == null) ? null :
            (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID);
        if (mRowId == null) {
            Bundle extras = getIntent().getExtras();
            mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID)
                                    : null;
        }

         mDbHelper = new NotesDbAdapter(this);
            mDbHelper.open();
          Cursor notesC = mDbHelper. fetchNote( mRowId);
            startManagingCursor(notesC);
            final String pass = notesC.getString( notesC.getColumnIndex("passw") );


         // custom dialog
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(R.layout.password);
            dialog.setTitle("Enter Password");

            final EditText enterpass = (EditText) dialog.findViewById(R.id.edtext);

            Button ok=(Button)findViewById(R.id.dialogButtonOK);
            ok.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    password= enterpass.getText().toString();
                    if(password.equals(pass.toString())){

                        Intent i= new Intent(getBaseContext(),NoteEditor.class);
                          i.putExtra(NotesDbAdapter.KEY_ROWID,mRowId);
                            startActivity(i);
                    }

                }
            });

            Button dialogButton = (Button)          dialog.findViewById(R.id.dialogButtonCANCEL);
            dialogButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    dialog.dismiss();
                }
            });
            dialog.show();  
    } 

【问题讨论】:

  • 代码的第 57 行是哪一行?
  • Password.java 中的第 57 行是什么?
  • ok.setOnClickListener(new View.OnClickListener() { 这是我在 eclipse 中 password.java 中的第 57 行
  • 请检查您的上下文是否为空...

标签: android android-intent android-dialog


【解决方案1】:

在这里:

Button ok=(Button)findViewById(R.id.dialogButtonOK);//<<

在访问视图之前,您忘记为 Activity 调用 setContentView。将Activity的onCreate中的Activity布局设置为:

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

或者如果 dialogButtonOK 按钮在 Dialog 内部,则使用 Dialog 实例将 ok 按钮初始化为:

Button ok=(Button)dialog.findViewById(R.id.dialogButtonOK);

【讨论】:

  • 但我已经设置了内容....查看 DIALOG 开始的行 "dialog.setContentView(R.layout.password);"
  • @Razin:你在哪里设置活动内容?因为使用dialog.setContentView(R.layout.password); 行你正在为 Dialog 而不是 Activity 设置内容
  • 是的,谢谢它的工作 :) 当我点击取消时,你能告诉我如何恢复我之前的活动吗??
  • @Razin : 在dialog.dismiss(); 之后使用 StartActivity 开始上一个活动或调用Current_Activity.this.finish(); 完成当前活动并开始上一个
  • @Razin:很高兴我能帮上忙。
【解决方案2】:

Buttonok 上似乎有错误,因为初始化以错误的方式完成,

这边!:

按钮确定=(Button)dialog.findViewById(R.id.dialogBu​​ttonOK);

改为:

按钮确定=(Button)findViewById(R.id.dialogBu​​ttonOK);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-02
    • 2018-12-12
    • 1970-01-01
    • 2023-04-06
    • 2023-03-22
    • 2022-11-20
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多