ユーザーが「保存」ボタンを押すと、選択した画像が 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