0

AsyncTask用来在社交媒体上发布一些状态。

private class PostOnSocialMedia extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {

        pDialog.setTitle(R.string.posting_status_on_social_media);
        Log.d(TAG, "onPreExecuteCalled.");
    }

    @Override
    protected String doInBackground(String... params) {

        Log.d(TAG, "doInBackground.");

        currentActivity.this.twitter.tweet(params[0]);
        currentActivity.this.facebook.post(params[0]);
        currentActivity.this.googlePlus.share(params[0]);

        return null;
    }

    @Override
    protected void onPostExecute(String result) {

        if (pDialog.isShowing()) {
            pDialog.dismiss();
        }

        // Start next Activity when posted on all social media.
        Intent intent = new Intent(currentActivity.this,
                nextActivity.class);
        intent.putExtra("userMatches", userMatches);
        startActivity(intent);
        Log.d(TAG, "onPostExecute.");

    }
}

当用户未登录时,可以说,Twitter我必须启动一个新Intent页面来显示 twitter 页面(以便用户可以登录)。这会导致流程返回AsyncTask并调用onPostExecute()方法。并开始了新的活动。

但我不想要这个。我想要的是用户登录Twitter然后它将返回到应用程序(当用户单击登录流返回到当前活动时。但是该活动被创建为一个新活动,而不是我开始调用社交媒体帖子的活动)。当回到应用程序时,我调用一个Twitter类的方法来继续完成未完成的发布任务。一旦完成,那么只有我想去下一个活动。

那么,有没有办法处理这种情况呢?

编辑:
是否可以使用 onSaveInstanceState(Bundle savedInstanceState)and来解决这个问题onRestoreInstanceState(Bundle savedInstanceState)

4

4 回答 4

0

我通过使用一个在重新创建之前static设置为的变量解决了我的问题,当执行时我使用这个变量来决定是否重新创建这个活动,如果是,那么调用方法来执行剩余的任务。 trueActivityActivityonCreate

Twitter发布完成后,我从成功完成发布的类调用活动方法,该方法调用在社交媒体上发布的方法。

活动方法:

public static void postDone() {
    // Go to next activity
}

班级电话Twitter

MyActivity.postDone();
于 2013-07-09T16:04:46.917 回答
0

在调用 asynctask 之前确保您的用户在两个平台上都登录,然后调用 asynctask,因为现在在这种情况下,用户可以做很多组合,所以我的建议是首先确保用户在两个 facbook、tiwtter 上都登录等等然后调用这个异步任务,这样你就不必让异步任务等待

于 2013-07-09T07:56:03.737 回答
0
AsyncTask used for background Process.

So you have to check All the condition before calling asynctask and then used.
于 2013-07-09T07:58:19.087 回答
0

通常,AsyncTasks 是在后台做一些事情而不阻塞 UI 线程。如果您希望您的主线程(= UI 线程)等待您的 AsyncTask,您可以在没有 AsyncTask 的情况下执行此操作。

但是,如果您想等待它,请尝试yourTask.get();,这将使您的主线程等待您的任务结果。在这里查看有关 get() 的更多信息。

于 2013-07-09T08:11:04.973 回答