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;
}

我有一个名为 FlickrjActivity 的 Activity,它创建了一个名为 UploadPhotoTask 的 AsyncTask UploadPhotoTask 有一个名为 onPostExecute 的方法,它有一个参数是上传照片的 Flickr 照片 ID 作为 Flickr API 的响应

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,它将创建UploadPhotoTask将照片上传到 Flickr,获取 photoID,然后使用setResult(RESULT_OK,intent);和将此 ID 返回到主要活动finish();

但是在我按下 Save 按钮后,onActivityResult()调用的 sinceLog.i("ordering","beforeResultCode");会在上传运行之前向 Logcat 打印消息,因此内部的块if(resultCode == RESULT_OK)从未被调用,因为onActivityResult()在上传完成后不会再次调用。那么为什么onActivityResult()会被称为 beforefinish()FlickrjActivity

4

1 回答 1

0

我确实找到了答案,只需将 android:launchMode 从“singleTask”更改为“singleTop”,虽然我不知道为什么。

于 2014-09-25T17:39:26.633 回答