这是显示我的对话框活动的代码。每当我试图打开这个意图时,我的应用程序就会强制关闭。所以请告诉我代码中的错误。下面是日志。
03-28 12:11:36.851:e/androidruntime(681):致命异常:main 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.ActuviyTrime.PrimeActudiCycActudio(AccviyTyth.java:1647)
03-28 12:11:36.851:E/AndroidRuntime(681):在
安卓(1663)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Actudio.App.AccviyTyth.Access 1500美元(AccviyTyth.java:117)03-28
12:11:36.851:E/AndroidRuntime(681):在
Actudio.App.ActuviyT线$ H.HoalMeMeSeX(ActuviyTrim.java:931)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Addio.OS.Halder-Debug消息(处理程序:Java:99)03-28
12:11:36.851:E/AndroidRuntime(681):在
安卓.OS.Looper-Loo.(循环器. Java:123)03-28 12:11: 36.851:
E/AndroidRuntime(681):在
Actudio.App.ActuviyTrime.主(ActhviyTo.java:3683)03-28
12:11:36.851:E/AndroidRuntime(681):在
Java.Lang.Eng.Simult.FutoEnnistic(原生方法)03-28
12:11:36.851:E/AndroidRuntime(681):在
Java.Lang.Eng.Simult.Voice(方法.java:507)03-28 12:11: 36.851:
E/AndroidRuntime(681):在
COM.Android .No.OS.ZyGoTynIt $方法和AgsCalal.Run(ZyGoTynIt.java:839)
03-28 12:11:36.851:E/AndroidRuntime(681):在
com内部操作系统(主:Java:597)
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):在
Neelasin .No.I.Couth.OnCube(密码:Java:57)03-28
12:11:36.851:E/AndroidRuntime(681):在
Addio.App.Tebug .CalActuviyOnCuto(To仪. Java:1047)
03-28 12:11:36.851:E/AndroidRuntime(681):在
Android .App.ActuviyTrime.PrimeActudiCycActudio(AccviyTyth.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();
    }

最佳答案

在这里:

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

在从活动访问视图之前,您忘记调用setContentView。将活动的onCreate中的活动布局设置为:
@Override
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); //<<<
   .....

或者如果dialogButtonOK按钮在对话框中,则使用对话框实例将ok按钮初始化为:
Button ok=(Button)dialog.findViewById(R.id.dialogButtonOK);

07-24 09:49
查看更多