0

ユーザーが「保存」ボタンを押すと、選択した画像が Flickr にアップロードされ、アップロードされた画像のソースが Flickr からデータベースに保存されます。flickrj-android ライブラリを使用して行います。これは私のコードです:

//call this function when "Save" button is clicked
Intent intent = new Intent(getApplicationContext(),FlickrjActivity.class);
intent.putExtra("flickImagePath", currentScreenshot);   
startActivityForResult(intent, UPLOAD_FLICKR);
Log.i("ordering","afterStartFlickrUpload");

onActivityResult()

switch(requestCode){
   case UPLOAD_FLICKR:
         Log.i("ordering","beforeResultCode");
         if(resultCode == RESULT_OK){   
             String flickr_source = data.getStringExtra("flickr_source");
             Log.i("flickr",flickr_source);
         }
         break;
}

そして、私は UploadPhotoTask と呼ばれる AsyncTask を作成する FlickrjActivity と呼ばれるアクティビティを持っています UploadPhotoTask には、Flickr API からの応答としてアップロードされた写真の Flickr 写真 ID であるパラメータを持つ onPostExecute と呼ばれるメソッドがあります

protected void onPostExecute(String response) {
   Log.i("photoID",response);
}

これは FlickrjActivity の load() メソッドです。

private void load(OAuth oauth) {
    if (oauth != null) {

        UploadPhotoTask taskUpload = new UploadPhotoTask(this, new File(
                path));
        taskUpload.setOnUploadDone(new UploadPhotoTask.onUploadDone() {

            @Override
            public void onComplete() {
                Intent intent = new Intent();
                intent.putExtra("flickr_source", "This is a link");
                setResult(RESULT_OK, intent);
                finish();
            }
        });

        taskUpload.execute(oauth);
    }
}

私の予想されるプロセスは、メイン アクティビティが を呼び出すインテントをFlickrjActivity作成し、Flickr に写真をアップロードするために作成UploadPhotoTaskし、photoID を取得してから、 と を使用してこの ID をメイン アクティビティに返すことですsetResult(RESULT_OK,intent);finish();

しかし、[保存] ボタンを押した直後に、onActivityResult()呼び出された sinceLog.i("ordering","beforeResultCode");は、アップロードが実行される前にメッセージを Logcat に出力するため、アップロードが完了した後に再度呼び出されないため、内部のブロックif(resultCode == RESULT_OK)は呼び出されませんでした。onActivityResult()では、なぜの前にonActivityResult()呼び出されるのでしょうか?finish()FlickrjActivity

4

1 に答える 1

0

理由はわかりませんが、android:launchMode を「singleTask」から「singleTop」に変更するだけで答えが見つかりました。

于 2014-09-25T17:39:26.633 に答える