0

私は現在、グリッドビューにこのチュートリアルhttp://www.androidhive.info/2012/02/android-gridview-layout-tutorial/を使用しています。私が試みているのは、選択した画像をアクティビティ結果としてメインアクティビティに返すように操作して、画像ビューに設定し、後で他のタスクで選択した画像を使用できるようにすることです。

私が抱えている問題は、結果をメインアクティビティに戻すことです。つまり、Uncaughtハンドラーエラーが発生します。はい、私は初心者なので、必ず私の間違いを指摘し、どこで間違ったのかについての説明は常に学習に役立ちます。

startActivityForResultの最初の呼び出し

Button.OnClickListener buttonClickListener4 = new Button.OnClickListener() {
  public void onClick(View ChoosePictureButton) {
    Intent intent = new Intent(PictureActivity.this, PicPicker2.class);
    startActivityForResult(intent, 2);

      } 

    };

画像をクリックすると結果を返す必要があるアクティビティ

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.grid_layout);

    GridView gridView = (GridView) findViewById(R.id.grid_view);

    // Instance of ImageAdapter Class
    gridView.setAdapter(new ImageAdapter(this));

    /**
     * On Click event for Single Gridview Item
     * */
    gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {

            // Sending image id to PictureActivity
            Intent i = new Intent();
            // passing array index
            i.putExtra("id", position);
            setResult(Activity.RESULT_OK, i);
            finish();
        }
    });
}

}

元のアクティビティで結果をキャッチしたい場所

  public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

        if (resultCode == Activity.RESULT_OK) {

             if(reqCode == 1) { for another activity result.... }           

              else if (reqCode == 2) {
                Intent i = getIntent();

                // Selected image id
                int position = i.getExtras().getInt("id");
                ImageAdapter imageAdapter = new ImageAdapter(this);
                ChosenImageView.setImageResource(imageAdapter.mThumbIds[position]);
              }
            }
        }   

はい、私はおそらくそれを虐殺しました、しかしそれは私が何をしようとしているのかについての考えを与えるはずです。私のlogcatは以下の通りです。

10-21 16:41:30.839: E/AndroidRuntime(4978): Uncaught handler: thread main exiting due to uncaught exception
10-21 16:41:30.869: E/AndroidRuntime(4978): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=2, result=-1, data=Intent { (has extras) }} to activity {jtek.industries.com/jtek.industries.com.PictureActivity}: java.lang.NullPointerException
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3329)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3371)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread.access$2700(ActivityThread.java:119)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1893)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.os.Looper.loop(Looper.java:123)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread.main(ActivityThread.java:4363)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at java.lang.reflect.Method.invokeNative(Native Method)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at java.lang.reflect.Method.invoke(Method.java:521)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at dalvik.system.NativeStart.main(Native Method)
10-21 16:41:30.869: E/AndroidRuntime(4978): Caused by: java.lang.NullPointerException
10-21 16:41:30.869: E/AndroidRuntime(4978):     at jtek.industries.com.PictureActivity.onActivityResult(PictureActivity.java:138)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.Activity.dispatchActivityResult(Activity.java:3828)
10-21 16:41:30.869: E/AndroidRuntime(4978):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3325)
4

1 に答える 1

1

onActivityResult()-methodで、-methodを使用してインテントを取得する理由はありますかgetIntent()

結果データを保持しないインテントを取得していると思いますが、アクティビティを開始したインテント(である可能性がありますnull)を取得しています。したがって、行int position = i.getExtras().getInt("id")iは、がnullになり、NPEがスローされます。

提供されているインテントデータパラメータを使用して問題が解決するかどうかを確認してください。

于 2012-10-22T15:24:58.730 に答える