Android AsyncTask如何将参数返回到MainActivity

Android AsyncTask如何将参数返回到MainActivity,android,parameter-passing,httpresponse,main-activity,Android,Parameter Passing,Httpresponse,Main Activity,我是android新手。我编写了一个asynctask类,它以一个字符串作为参数。Asynctask类有两个函数doinbackground和onpostexecute。doinbackground正在执行httppost,如果post成功,它将向onpostexecute返回字符串“Success”,或向onpostexecute返回“Failed” 在Mainactivity中,我调用Asyncclass,如下所示: 新建MyAsyncTask().execute(xmlFile) 但是我需

我是android新手。我编写了一个asynctask类,它以一个字符串作为参数。Asynctask类有两个函数doinbackground和onpostexecute。doinbackground正在执行httppost,如果post成功,它将向onpostexecute返回字符串“Success”,或向onpostexecute返回“Failed”

在Mainactivity中,我调用Asyncclass,如下所示: 新建MyAsyncTask().execute(xmlFile)

但是我需要得到doinbackground在我的mainactivity中返回的字符串,因为基于这个状态,我需要更新一个数据库字段。谁能在这个问题上帮助我

假设我想在MainActivity中执行以下操作

////////////////////////

通过传递字符串来运行asyncclass

如果doinbackground返回“成功”,则更新数据库

否则不更新

///////////////////////////


谢谢

您可以使用该接口作为对活动的回调

您可以在下面的链接中查看Blackbelt的答案


或者,您可以将
AsyncTask
设置为活动的内部类,并在
onPostExecute
中获取结果。您可以使用接口作为活动的回调

您可以在下面的链接中查看Blackbelt的答案


或者,您可以将
AsyncTask
设置为活动的内部类,并在
onPostExecute
中获取结果。您可以使用接口作为活动的回调

您可以在下面的链接中查看Blackbelt的答案


或者,您可以将
AsyncTask
设置为活动的内部类,并在
onPostExecute
中获取结果。您可以使用接口作为活动的回调

您可以在下面的链接中查看Blackbelt的答案


或者,您可以将
AsyncTask
作为一个内部活动类,并在
onPostExecute
中获得结果。您有几种方法。一种是使用
处理程序
,将
活动
与您的
异步任务
相互通信。这需要将
处理程序
对象从
活动
传递到
异步任务
并存储在那里,以便以后使用。更多关于这个

另一种方法是使用
广播接收器
。您将它声明在您想要使用它的地方(即,您想要接收数据的地方,在本例中是在您的
活动
中),并且您将
发送广播
异步任务
发送到
活动
。更多关于这个


有更多的方法,但这是最广泛使用的方法。

您有几种方法。一种是使用
处理程序
,将
活动
与您的
异步任务
相互通信。这需要将
处理程序
对象从
活动
传递到
异步任务
并存储在那里,以便以后使用。更多关于这个

另一种方法是使用
广播接收器
。您将它声明在您想要使用它的地方(即,您想要接收数据的地方,在本例中是在您的
活动
中),并且您将
发送广播
异步任务
发送到
活动
。更多关于这个


有更多的方法,但这是最广泛使用的方法。

您有几种方法。一种是使用
处理程序
,将
活动
与您的
异步任务
相互通信。这需要将
处理程序
对象从
活动
传递到
异步任务
并存储在那里,以便以后使用。更多关于这个

另一种方法是使用
广播接收器
。您将它声明在您想要使用它的地方(即,您想要接收数据的地方,在本例中是在您的
活动
中),并且您将
发送广播
异步任务
发送到
活动
。更多关于这个


有更多的方法,但这是最广泛使用的方法。

您有几种方法。一种是使用
处理程序
,将
活动
与您的
异步任务
相互通信。这需要将
处理程序
对象从
活动
传递到
异步任务
并存储在那里,以便以后使用。更多关于这个

另一种方法是使用
广播接收器
。您将它声明在您想要使用它的地方(即,您想要接收数据的地方,在本例中是在您的
活动
中),并且您将
发送广播
异步任务
发送到
活动
。更多关于这个


有更多的方法,但这是最广泛使用的方法。

您可能只需要在doInBackground中进行数据库更新,而不是在onPostExecute中进行更新,这样您就可以得到结果,无论http调用是否通过

或者,您可以让AsyncTask返回一个类,说明它是否成功,然后在onPostExecute中处理结果,但此时您回到UI线程上,可能不想用db更新阻止它

private class PostResult {
    boolean succeeded;
    String response;
}
private class PostAsync extends AsyncTask<String, String, PostResult> {
    protected PostResult doInBackground(String... xmlToPost) {
        PostResult result = new PostResult();
        try {
        //do you httpPost... with xmlToPost[0];
            result.response = "your data back from the post...";
            result.succeeded = true;
        //get your string result
        }catch (Exception ex){
            result.succeeded = false;
        }

        // I would update the db right here, 
        // since it's still on the background thread

        return result;
    }

    protected void onPostExecute(PostResult result) {
        //you're back on the ui thread...
        if (result.succeeded){

        }
    }
}
私有类PostResult{
布尔成功;
字符串响应;
}
私有类PostAsync扩展异步任务{
受保护的PostResult doInBackground(字符串…xmlToPost){
PostResult结果=新的PostResult();
试一试{
//您是否使用xmlToPost[0]发布httpPost;
result.response=“从帖子中返回您的数据…”;
result.successed=true;
//获取字符串结果
}捕获(例外情况除外){
result.successed=false;
}
//我会在这里更新数据库,
//因为它仍然在后台线程中
返回结果;
}
PostExecute上受保护的void(PostResult结果){
//你回到了ui线程上。。。
if(result.successed){
}
}
}

您可能只需要在doInBackground而不是onPos中更新数据库