0

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

在 Mainactivity 我调用 Asyncclass 如下: new MyAsyncTask().execute(xmlFile);

但是我需要获取 doinbackground 在我的 mainactivity 中返回的字符串,因为我需要根据这个状态更新一个数据库文件。任何人都可以在这个问题上帮助我。

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

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

通过传递一个字符串来运行异步类;;;

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

否则不更新

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

谢谢

4

3 回答 3

1

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

您可以在以下链接中查看黑带答案

如何从 AsyncTask 返回布尔值?

或者您可以创建AsyncTask一个内部活动类并在onPostExecute.

于 2014-01-23T19:25:24.777 回答
1

你有几种方法。一种是使用Handler,Activity与您的AsyncTask. 这将涉及将Handler对象从传递ActivityAsyncTask并将其存储在那里,以便您以后可以使用它。更多关于这里

另一种方法是使用BroadcastReceiver. 你在你想要使用它的地方声明它(即你想要接收数据的地方,在这种情况下是在ActivitysendBroadcast的. 更多关于这个hereAsyncTaskActivity

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

于 2014-01-23T19:26:28.277 回答
1

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

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

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){

        }
    }
}
于 2014-01-23T19:40:34.003 回答