3

たくさんの投稿を調べましたが、なぜこれが機能しないのか理解できません。私がやりたいのは、ユーザーにギャラリーアプリを開くボタンをクリックさせることだけです。次に、ユーザーはギャラリーを自動的に閉じてアプリケーションに戻り、その画像をImageViewに自動的に設定する画像を選択します。

これまでのところ、アプリケーションに戻るまでずっと機能しています。すべて問題ないようですが、画像がImageViewに表示されることはありません。

ImageViewのXMLコードは次のとおりです。

<ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:layout_gravity="center_horizontal" />

アクティビティの開始時に、次のようにImageViewを設定しました。

 ImageView targetImage;

そして、これが画像を取得してImageViewに設定するための残りのコードです。「setGunImage」を起動するボタンがあります。

public void setGunImage(View view) {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_PICTURE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            targetImage = (ImageView)findViewById(R.id.imageView1);
            Uri selectedImageUri = data.getData();
            targetImage.setImageURI(selectedImageUri);
        }
    }
}

SDカードを有効にしたシミュレーターと、実際のデバイスにロードされた画像の両方でテストしました。どちらも同じ動作をします。ギャラリーの手順は正常に実行されますが、アプリケーションに戻ると、ImageViewに画像が読み込まれていません。

データをビットマップに変更して設定しようとしましたが、どちらも表示されませんでした。私はそれがおそらく私が見ていなかった非常に単純なものであることを知っているので、うまくいけば、新鮮な目が私を正しい方向に向けることができます。ありがとう。

4

2 に答える 2

2

Imran ソリューションは正常に動作するはずだと思います..............そして、この方法を試すこともできます

 @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            InputStream stream = null;
         if( resultCode==RESULT_OK)
           {
              if(requestCode==SELECT_PICTURE)
               {
                try {
                    // We need to recyle unused bitmaps
                    if (bitmap != null) {
                        bitmap.recycle();
                    }
                    stream = getContentResolver().openInputStream(data.getData());
                    bitmap = BitmapFactory.decodeStream(stream);

                                targetImage = (ImageView)findViewById(R.id.imageView1);
                    targetImage.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } finally {
                    if (stream != null)
                        try {
                            stream.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                }
            super.onActivityResult(requestCode, resultCode, data);
        }

}

リンクから

于 2012-06-14T18:57:03.700 に答える
1

setImageURI で URI を渡しているので、最初にMediaStore.Images.Media.DATAURI を使用して画像のパスを取得し、次に setImageURI で画像のパスを渡します。この方法を試してください:

@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if( resultCode==RESULT_OK)
        {
            if(requestCode==SELECT_PICTURE)
        {
            targetImage = (ImageView)findViewById(R.id.imageView1);
            Uri selectedImageUri = data.getData();
            String selectedImagePath=getPath(selectedImageUri);
            targetImage.setImageURI(selectedImageUri);
            }
        }
    }

    private String getPath(Uri uri)
        {    
        String[] projection={MediaStore.Images.Media.DATA}; 
        Cursor cursor=managedQuery(uri,projection,null,null,null);
        int column_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
        cursor.moveToFirst(); 
        return cursor.getString(column_index); 
    }  
于 2012-06-14T18:53:59.787 に答える