2013-03-28 44 views
2

下面是顯示我的對話框活動的代碼。每當我嘗試打開這個意圖時,我的應用程序就會關閉,所以請告訴我我的代碼中的錯誤。這裏是logcat。當我嘗試顯示對話框時,它給了我FORCE CLOSE錯誤

03-28 12:11:36.851:E/AndroidRuntime(681):致命異常:主03-28 12:11:36.851:E/AndroidRuntime(681):了java.lang.RuntimeException: 無法啓動活動 ComponentInfo {com.neelrazin.noteit/com.neelrazin.noteit.Password}: java.lang.NullPointerException 03-28 12:11:36.851: E/AndroidRuntime(681):at android.app .ActivityThread.performLaunchActivity(ActivityThread.java:1647) 03-28 12:11:36.851:E/AndroidRuntime(681):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 03-28 12: 11:36.851:E/AndroidRunt ime(681):at android.app.ActivityThread.access $ 1500(ActivityThread.java:117)03-28 12:11:36.851:E/AndroidRuntime(681):at android.app.ActivityThread $ H.handleMessage (ActivityThread.java:931) 03-28 12:11:36.851:E/AndroidRuntime(681):at android.os.Handler.dispatchMessage(Handler.java:99)03-28 12:11:36.851: E/AndroidRuntime(681):at android.os.Looper.loop(Looper.java:123)03-28 12:11:36.851: E/AndroidRuntime(681):at android.app.ActivityThread.main( ActivityThread.java:3683)03-28 12:11:36.851:E/AndroidRuntime(681):at java.lang.reflect.Method.invokeNative(Native Method)03-28 12:11:36.851:E/AndroidRuntime(6 81):at java.lang.reflect.Method.invoke(Method.java:507)03-28 12:11:36.851: E/AndroidRuntime(681):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839) 03-28 12:11:36.851:E/AndroidRuntime(681):at 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):at com.neelrazin.noteit.Password.onCreate(Password.java:57)03-28 12:11:36.851:E/AndroidRuntime (681):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 12月3日至28日: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(); 
    } 
+0

這是你的代碼的第57行嗎? – 2013-03-28 06:45:26

+0

Password.java中的第57行是什麼? – 2013-03-28 06:45:30

+0

ok.setOnClickListener(new View.OnClickListener(){這是我的第57行password.java中的日食 – Razin 2013-03-28 06:48:55

回答

4

在這裏:

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); 
+0

但我已經設置了內容....看到對話的地方DIALOG啓動「dialog.setContentView(R.layout.password);」 – Razin 2013-03-28 06:51:22

+1

@Razin:你在哪裏設置Content for Activity?因爲使用'dialog.setContentView(R.layout.password);'line u是爲內容設置Dialog而不是活動 – 2013-03-28 06:52:49

+0

耶感謝它的工作:)並且你能告訴我什麼時候我點擊取消我怎麼能回到我以前的活動? – Razin 2013-03-28 06:55:08

2

似乎對Buttonok錯誤,因爲初始化中完成錯誤的方法,

這樣!:

Button ok =(Button)dialog.findViewById(R.id.dialogBu​​ttonOK);

相反:

按鈕OK =(按鈕)findViewById(R.id.dialogBu​​ttonOK);

相關問題