Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行在同一活动的上一个实例中启动的AsyncTask的剩余任务_Java_Android_Android Asynctask_Android Activity - Fatal编程技术网

Java 执行在同一活动的上一个实例中启动的AsyncTask的剩余任务

Java 执行在同一活动的上一个实例中启动的AsyncTask的剩余任务,java,android,android-asynctask,android-activity,Java,Android,Android Asynctask,Android Activity,我正在使用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, "onPr

我正在使用
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.");

    }
}
私有类PostOnSocialMedia扩展异步任务{
@凌驾
受保护的void onPreExecute(){
pDialog.setTitle(R.string.posting_status_on_social_media);
Log.d(标记为“onprexecutecalled”);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
Log.d(标签“doInBackground”);
currentActivity.this.twitter.tweet(参数[0]);
currentActivity.this.facebook.post(参数[0]);
currentActivity.this.googlePlus.share(参数[0]);
返回null;
}
@凌驾
受保护的void onPostExecute(字符串结果){
if(pDialog.isShowing()){
pDialog.disclose();
}
//在所有社交媒体上发布后开始下一个活动。
意向意向=新意向(currentActivity.this,
(触觉类);
intent.putExtra(“userMatches”,userMatches);
星触觉(意向);
Log.d(标记“onPostExecute”);
}
}
当用户未登录时,比如说,
Twitter
我必须启动一个新的
Intent
来显示Twitter页面(以便用户可以登录)。这会导致流返回到
AsyncTask
,并调用
onPostExecute()
方法。新的活动开始了

但我不想要这个。我想要的是,用户登录到
Twitter
,然后它将返回到应用程序(当用户单击“登录流”时,它将返回到当前活动。但该活动是作为一个新活动创建的,而不是我开始调用social Media post时创建的活动)。当它返回到应用程序时,我调用
Twitter
类的方法继续完成未完成的发布任务。一旦完成,我只想参加下一个活动

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

编辑:

使用
onSaveInstanceState(Bundle savedInstanceState)
onRestoreInstanceState(Bundle savedInstanceState)
可以解决这个问题吗?

在调用asynctask之前,请确保您的用户在两个平台上都已登录,然后调用asynctask,因为在这种情况下,用户可以进行多种组合,因此,我的建议是,首先确保用户同时登录facbook、tiwtter等。然后调用此asynctask,这样就不必让asynctask等待。一般来说,AsyncTasks是在后台执行任务,而不会阻塞UI线程。如果希望主线程(=UI线程)等待AsyncTask,则可以不使用AsyncTask来完成

AsyncTask used for background Process.

So you have to check All the condition before calling asynctask and then used.

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

我通过使用
静态
变量解决了我的问题,该变量在重新创建
活动之前设置为
true
,当
活动
执行在
onCreate
中时,我使用该变量来确定是否重新创建该活动,如果是,然后调用方法来执行剩余的任务

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

活动中的方法:

public static void postDone() {
    // Go to next activity
}
来自
Twitter
class的呼叫:

MyActivity.postDone();

问题在于用户未登录的情况。如果用户已经登录,那么我就不需要显示Twitter页面,也没有问题。问题是当用户没有登录时。如果用户已登录,则我不需要显示Twitter页面,一点问题也没有。如果用户未登录,则放置一个警报框以指示该情况并强制用户登录,否则不要调用asyntask并不显示内容:9在
UI
线程中不允许使用网络内容。因此,我必须使用
AsyncTask
。问题是当用户登录时,会重新创建活动。因此,执行get()不起作用。为什么要重新创建活动?回到你的主要活动。(或者你开始一个不同的项目?你可以在你的主线程中这样做)这是通过Twitter完成的。显示Twitter页面的活动将作为返回应用程序的一部分重新创建。如果您想执行asynctask调用的结果,请在第一个asynctask的
onPostExecute
中调用第二个asynctask,记住在这种情况下,第二个asynctask应将第一个asynctask的输出作为其输入。否则,结果调用没有任何意义。