我需要为我的应用程序做一个这样的功能:当用户按下“保存”按钮时,选定的图像将被上传到 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
?