2

ギャラリーまたはカメラのいずれかによって選択された m 画像を別のアクティビティに送信しようとしていますが、何も起こっていないようです。ビットマップを文字列に変換してインテント経由で送信しましたが、インテントが呼び出されないようです。

私は何が間違っているのですか?

これは私の onActivityResult() コードです

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            Bitmap thumbnail = null;
            if(requestCode==RESULT_LOAD_IMAGE){
               if(resultCode==RESULT_OK){

                    Uri selectedImageUri = data.getData();
                    String[] filePathColumn = { MediaStore.Images.Media.DATA };
                    Cursor cursor = getContentResolver().query(selectedImageUri,filePathColumn, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String picturePath = cursor.getString(columnIndex);
                    cursor.close();
                    data.getExtras().get("data");

                    thumbnail = (BitmapFactory.decodeFile(picturePath));

                    //CONVERT BITMAP TO STRING
                    ByteArrayOutputStream baos=new  ByteArrayOutputStream();
                    thumbnail.compress(Bitmap.CompressFormat.PNG,100, baos);
                    byte [] b=baos.toByteArray();
                    String temp=Base64.encodeToString(b, Base64.DEFAULT);
                        //trying to start activity...

                    Intent intent = new Intent(Home.this, Upload.class);
                    intent.putExtra("picture", temp);
                    startActivity(intent);}

                }
            }

            }
4

2 に答える 2

1

画像を文字列に変換する代わりに、ファイルへのパスを操作して、他のアクティビティで再度読み込みませんか? アプリPic4Shareで同じ問題に直面していたので、その方法で解決しました。

ギャラリーから画像を読み込むアクティビティで:

String stringPath;

protected void onActivityResult(int requestCode, int resultCode,Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
        switch(requestCode) { 
            case SELECT_PHOTO:
                if(resultCode == RESULT_OK){  
                    Uri selectedImage = imageReturnedIntent.getData();
                    String[] filePathColumn = {MediaStore.Images.Media.DATA};
                    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                    cursor.moveToFirst();

                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    stringPath = cursor.getString(columnIndex); // ***Here is stored the path***
                    cursor.close();

                    BitmapFactory.Options opts = new BitmapFactory.Options ();
                    opts.inSampleSize = 4;   // for 1/2 the image to be loaded
                    opts.inPurgeable = true;

                    image.setImageBitmap(decodeSampledBitmapFromFile(txtPath, 800, 800));

                }
                else{
                    //Toast.makeText(getApplicationContext(),"Error", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

次に、インテントを使用してパスで文字列を渡すことができます。

Intent intent = new Intent(Home.this, Upload.class);
Bundle b = new Bundle();
b.putString("picture", stringPath);
intent.putExtras(b);
startActivity(intent);

最後に、別のアプリケーションで次のパスを使用して画像を再度読み込みます。

Bundle b = getIntent().getExtras();
String picturePath = b.getString("picture");
Bitmap scaledBitmap = decodeSampledBitmapFromFile(picturePath, 150, 150);
于 2013-07-02T03:24:42.653 に答える
0

アクティビティのロジックを尊重するために、ビットマップを String オブジェクトに変換する必要があるかどうかはわかりません。そうでない場合は、変換ビットマップ -> String がBitmap実装されているため役に立たなくなったため、メソッドParcelableを使用してインテントを介して渡すことができますputExtra(String name, Parcelable value)

このリンクでいくつかのコードを見つけることができます

例:

インテントを送る

Intent intent = new Intent(Home.this, Upload.class);
intent.putExtra("picture", thumbnail);

他のアクティビティから取得します

Bitmap bitmap = (Bitmap) intent.getParcelableExtra("picture");

それが役に立てば幸い

于 2013-07-01T22:06:34.547 に答える