0

Main アクティビティには、新しいメモを追加するためのボタンがあります(これは一種の付箋 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);
        }
    });

}

NB: 私の 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

Main Activity の次の行が原因だと思います。

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

null のときに newNote から値を取得しようとしましたが 、なぜ null なのですか?

-------------------------------------------------- - - - - -編集 - - - - - - - - - - - - - - - - - - - - -------------------

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();
            }
        });
4

1 に答える 1

0

これを試すこともできます...

注のインスタンスを保持する静的クラスを作成し、AddActivity で値を次のように追加します。

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

次に、mainactivity チェックの OnREsume で

   if (StaticClass.noteitem!=null)

StaticClass.noteitem.summary などとしてアイテムにアクセスします。

于 2013-04-21T17:28:56.270 に答える