-2

私のアプリでは、画像ボタンをクリックするとギャラリーに移動します。画像をクリックした後、画像パスを保存するために呼び出したいのですonActivityResultが、機能しません。私のLogCat場合、画像パスを保存しようとするとクラッシュすることが常に通知されます。

私のonActivityResult方法:

mImageRowId = savedInstanceState != null ? savedInstanceState.getLong(ImageAdapter.KEY_ROWID) : null;

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if(requestCode == PICK_FROM_FILE && data != null && data.getData() != null) {
    Uri uri = data.getData();

    if(uri != null) {
      Cursor cursor = getContentResolver().query(uri, new String[] {
        android.provider.MediaStore.Images.ImageColumns.DATA
      }, null, null, null);
      cursor.moveToFirst();
      String image = cursor.getString(0);
      cursor.close();

      if(image != null) {
      // HERE IS WHERE I WANT TO SAVE THE IMAGE. HERE MUST BE THE ERROR!
        if (mImageRowId == null) {
          long id = mImageHelper.createImage(image);

          if (id > 0) {
            mImageRowId = id;
          }
        }

        // Set the image and display it in the edit activity
        Bitmap bitmap = BitmapFactory.decodeFile(image);
        mImageButton.setImageBitmap(bitmap);
      }
    }
  }
}

これは私のonSaveInstanceState方法です:

private static final Long DEF_ROW_ID = 0L;
  @Override
  protected void onSaveInstanceState(Bundle outState) {
    outState.putLong(ImageAdapter.KEY_ROWID, mImageRowId != null ? mImageRowId : DEF_ROW_ID);
    super.onSaveInstanceState(outState);
}

これは私の一部ですDbAdapter

public long createImage(String image) {
  ContentValues cv = new ContentValues();
  cv.put(KEY_IMAGE, image);
  return mImageDb.insert(DATABASE_TABLE, null, cv);
}

問題を見つけることができますか?

4

1 に答える 1

0

あなたの mImageHelper は何ですか?

それ以外の場合は、android.provider.MediaStore.Images.ImageColumns.DATA を含む変数イメージを使用してビットマップを作成しようとしています。しかし、この列はファイルパスではありません:)

onActivityresult (data.getData) で受け取ったデータ オブジェクトに対してクエリを実行し、列 MediaStore.Images.Media.DATA を取得します。

パスからイメージを作成する必要があります。

幸運を。

于 2012-05-31T16:36:18.190 に答える