0

アクティビティから別のアクティビティにバイト配列を送信する必要があります。私はこのようなものを持っています: Activity1- > Activity2- >Activity1

Activity2 で写真を作成し、それを Activity1 に送信して表示したいと考えてbyte[] imageDataいます。このため、Activity2 には次のものがあります。

Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
       public void onPictureTaken(byte[] imageData, Camera c) {

           if (imageData != null) {
               takephoto=1;
               prefsEditor.putInt(TAKEPHOTO, takephoto);
               prefsEditor.commit();

               System.out.println("imageData in TakePHoto"+ imageData);
               Intent mIntent = new Intent();


               Bundle b = new Bundle();
               b.putByteArray("imageData", imageData);

               mIntent.putExtras(b);

               setResult(FOTO_MODE, mIntent);
               finish();

           }
           mCamera.startPreview();
           mPreviewRunning=true;
       }
   };

Activity1で、私はこれOnActivityResult()を持っています:

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            takephoto = myPrefs.getInt(TAKEPHOTO,0);
            System.out.println("OnActivityResult"+resultCode);  
                if (resultCode == RESULT_OK )

                        if (takephoto == 1){
                Toast.makeText(this, "11",Toast.LENGTH_SHORT).show();

                                 BitmapFactory.Options options = new BitmapFactory.Options();
                                options.inSampleSize = 3;

                                byte[] imageData = data.getByteArrayExtra("imageData");

                                System.out.println("imageData in Photos"+ imageData );

                                Bitmap myImage = BitmapFactory.decodeByteArray(imageData, 0,
                imageData.length, options);

                                Matrix mat = new Matrix();
                                mat.postRotate(90);
                                bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(),
                myImage.getHeight(), mat, true);

                                myadapter.notifyDataSetChanged();
                        }
        }

問題は、 inActivity1 onActivityResultが呼び出されず、自分の間違いがどこにあるのかわからないことです。私は Netbeans で作業しており、このコードを Eclipse でテストしましたが、正常に動作します。誰でも私を助けることができますか?

4

2 に答える 2

1

putExtras のドキュメントを参照してください。

インテントに一連の拡張データを追加します。キーにはパッケージ プレフィックスを含める必要があります。たとえば、アプリ com.android.contacts は「com.android.contacts.ShowAll」のような名前を使用します。

バンドルをインテントに入れる代わりに:

Bundle b = new Bundle();
b.putByteArray("imageData", imageData);

mIntent.putExtras(b);

bytearray を直接試すことができます:

mIntent.putExtra("imageData", imageData);

onActivityResult が呼び出されない理由:

結果を設定するときは、コード FOTO_MODE を使用します。

setResult(FOTO_MODE, mIntent);

ただし、onActivityResult では、コードを確認します。

resultCode == RESULT_OK 

あなたはそれをすべきです:

if (resultCode == FOTO_MODE) {
     // then all your stuff of getting data from the intent.
}

System.out.println("OnActivityResult"+resultCode); を使用する代わりに
使用する :

  Logd.d("Myclass", "OnActivityResult"+resultCode);
于 2012-07-12T09:51:33.913 に答える
0

アプリケーションの解決策を見つけました (なぜonActivityResult()呼び出されなかったのかまだわかりません)。Activity2私は入れました:

String stringData=Base64.encodeToString( imageData, Base64.DEFAULT);
prefsEditor.putString(STRINGDATA, stringData);
prefsEditor.commit();

そして、Activity1私はこのように取得imageDataSharedPreferencesます:

String stringData = myPrefs.getString(STRINGDATA, "stringData");
byte[] imageData = Base64.decode(stringData, Base64.DEFAULT);

このように、 を受け取ることができますbyte[]

于 2012-07-13T14:19:55.723 に答える