2013-04-21 73 views
0

主要活動傳遞額外的主要活動我必須一個按鈕添加一個新的註釋(這是一個老的便籤Android應用程序):從另一個調用

ArrayAdapter<Note> adapter = (ArrayAdapter<Note>) getListAdapter(); 
    Note note = null; 
    switch (view.getId()) { 
    case R.id.add: 
     // Call AddActivity to specify content of the note fields to be 
     // added to the DB 
     intentToAdd = new Intent(this, AddActivity.class); 
     startActivity(intentToAdd); 

     //get the extras from AddActivity 
     Note newNote = getIntent().getExtras().getParcelable("myNewNote"); 

     String summary = newNote.getSummary(); 
     String details = newNote.getDetails(); 

     // Save the new note in the database 
     note = datasource.createNote(summary, details); 
     adapter.add(note); 
     break; 

然後我有AddActivity(其中包含形式添加一個新注),其onCreate方法是:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add); 

    butAdd = (Button) findViewById(R.id.buttonAjout); 

    intentToMain = new Intent(this, MainActivity.class); 

    butAdd.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      EditText summary = ((EditText) findViewById(R.id.editTextSum)); 
      EditText details = ((EditText) findViewById(R.id.editTextDet)); 

      Note note =new Note(summary.toString(),details.toString()); 
      intentToMain.putExtra("myNewNote", note); 

      startActivity(intentToMain); 
     } 
    }); 

} 

N.B:我的Note類實現Parcelable Class!

這裏是我的問題: 當我點擊添加按鈕在主活動我的應用程序崩潰(「意外停止」)爲什麼:(???

告訴我,如果有一些其他失蹤信息或代碼...謝謝...

的logcat的說,這是一個NullPointerException:

04-21 17:00:07.832: D/AndroidRuntime(278): Shutting down VM 
04-21 17:00:07.832: W/dalvikvm(278): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 
04-21 17:00:07.892: E/AndroidRuntime(278): FATAL EXCEPTION: main 
04-21 17:00:07.892: E/AndroidRuntime(278): java.lang.IllegalStateException: Could not execute method of the activity 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.view.View$1.onClick(View.java:2072) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.view.View.performClick(View.java:2408) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.view.View$PerformClick.run(View.java:8816) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.os.Handler.handleCallback(Handler.java:587) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.os.Looper.loop(Looper.java:123) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.app.ActivityThread.main(ActivityThread.java:4627) 
04-21 17:00:07.892: E/AndroidRuntime(278): at java.lang.reflect.Method.invokeNative(Native Method) 
04-21 17:00:07.892: E/AndroidRuntime(278): at java.lang.reflect.Method.invoke(Method.java:521) 
04-21 17:00:07.892: E/AndroidRuntime(278): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
04-21 17:00:07.892: E/AndroidRuntime(278): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
04-21 17:00:07.892: E/AndroidRuntime(278): at dalvik.system.NativeStart.main(Native Method) 
04-21 17:00:07.892: E/AndroidRuntime(278): Caused by: java.lang.reflect.InvocationTargetException 
04-21 17:00:07.892: E/AndroidRuntime(278): at com.insat.notememoiresqlite.MainActivity.onClick(MainActivity.java:69) 
04-21 17:00:07.892: E/AndroidRuntime(278): at java.lang.reflect.Method.invokeNative(Native Method) 
04-21 17:00:07.892: E/AndroidRuntime(278): at java.lang.reflect.Method.invoke(Method.java:521) 
04-21 17:00:07.892: E/AndroidRuntime(278): at android.view.View$1.onClick(View.java:2067) 
04-21 17:00:07.892: E/AndroidRuntime(278): ... 11 more 
04-21 17:00:07.892: E/AndroidRuntime(278): Caused by: java.lang.NullPointerException 
04-21 17:00:07.892: E/AndroidRuntime(278): ... 15 more 
04-21 17:04:37.812: I/Process(278): Sending signal. PID: 278 SIG: 9 

我認爲這是因爲在主活性狀況,這些線TY:

String summary = newNote.getSummary(); 
String details = newNote.getDetails(); 

,我嘗試從newNote獲取值,而它的空 但爲什麼無效?

-------------------------------------------- - - - - - - - -編輯 - - - - - - - - - - - - - - - - - -------------------------

我試過onActivityResult解決方案,但我仍然有一個NullPointerException這行:

Note newNote = getIntent().getExtras().getParcelable("myNewNote"); 

下面是代碼: 在主要活動:

public void onClick(View view) { 
     adapter = (ArrayAdapter<Note>) getListAdapter(); 
     switch (view.getId()) { 
     case R.id.add: 
      // Call AddActivity to specify content of the note fields to be 
      // added to the DB 
      intentToAdd = new Intent(this, AddActivity.class); 
      startActivityForResult(intentToAdd, 0); 
      break; 

則:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 

     Log.i("aaaaa", "Dans le onActivityResult "); 
     if (resultCode == RESULT_OK) { 
      Log.i("aaaaa", "RESULT_OK "); 
      // get the extras from AddActivity 
      Note newNote = getIntent().getExtras().getParcelable("myNewNote"); 
      if (newNote != null) { 
       String summary = newNote.getSummary(); 
       String details = newNote.getDetails(); 

       // Save the new note in the database 
       note = datasource.createNote(summary, details); 
       adapter.add(note); 

      } else { 
       Log.i("aaaaa", "newNote est null !!!!!!!! "); 
      } 
     } else { 
      Log.i("aaaaa", "RESULT_PAS OK "); 
     } 
    } 

並在AddActivity:

super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add); 
     Log.i("aaaaa", "Dans le onCreate de AddActivity"); 

     butAdd = (Button) findViewById(R.id.buttonAjout); 

     intentToMain = new Intent(this, MainActivity.class); 

     butAdd.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Log.i("aaaaa", "Dans le onClick du bouton ajout"); 
       EditText summary = ((EditText) findViewById(R.id.editTextSum)); 
       EditText details = ((EditText) findViewById(R.id.editTextDet)); 

       Note note =new Note(summary.toString(),details.toString()); 
       intentToMain.putExtra("myNewNote", note); 
       setResult(RESULT_OK); 
       finish(); 
      } 
     }); 
+3

您可以通過查看Logcat來了解爲什麼發生崩潰的公平想法。 – 2013-04-21 17:03:44

+2

你錯了。 startActivity啓動一個活動,但它不會等待它再次啓動主要活動。使用startActivityWithResult,並將你的Note處理放在主Activity的onActivityResult中。 – njzk2 2013-04-21 17:15:44

+0

MainActivity是您的網上活動嗎? – Sanghita 2013-04-21 17:19:12

回答

0

你也可以試試這個...

請保持信息的一個例子靜態類,然後在AddActivity值添加到它的

StaticClass.noteitem.summary="abc"; 
    StaticClass.noteitem.details="abcdef"; 

然後在你的mainactivity檢查

if (StaticClass.noteitem!=null) 

的的onResume並訪問您的項目作爲StaticClass.noteitem.summary等