将AsyncTask的结果返回到Android应用程序中的调用活动

时间:2014-05-29 11:04:26

标签: android android-asynctask

我正在寻找将我的Android应用程序连接到WCF RESTful Web服务,到目前为止,我已经做好了设置。但是现在我正在通过AsyncTask<>

将执行分割到后台线程上

不是将AsyncTask类嵌入到活动.java文件中,我宁愿将它们拆分为单独的包,以便它们可以被应用程序中的多个活动和片段使用(但是我可能会丢失)这里有明显的东西),我如何将AsyncTask的结果编组回调用Activity?我知道我会将doInBackground()的结果传递给onPostExecute() - 但是如何将结果传递回调用活动或片段?

类似地,我如何在父活动上调用进度通知作为单独的AsyncTask<>类将不具备UI组件的知识或可见性。

在C#中,我可能已经通过回调委托传递给AsyncTask的构造函数<>指向父活动上的方法,然后在任务完成时使用结果的参数调用回调委托。它与Android类似吗?

2 个答案:

答案 0 :(得分:2)

您可以通过使用方法创建接口来完成此操作。让您的活动实现此界面。然后将活动的引用(使用此关键字)传递给异步任务,该任务可以通过其构造函数创建为单独的类。然后在Async Task的postExecute()方法中,调用接口的方法返回活动。

答案 1 :(得分:1)

如果您想与RESTful服务进行交互,也许您可​​以使用以下方法省去一些麻烦:

改造示例:

Retrofit将您的REST API转变为Java界面。

public interface GitHubService {
  @GET("/users/{user}/repos")
  List<Repo> listRepos(@Path("user") String user);
}

RestAdapter类生成GitHubService接口的实现。

RestAdapter restAdapter = new RestAdapter.Builder()
    .setEndpoint("https://api.github.com")
    .build();

GitHubService service = restAdapter.create(GitHubService.class);

对生成的GitHubService的每次调用都会向远程Web服务器发出HTTP请求。

List<Repo> repos = service.listRepos("octocat");

来源:http://square.github.io/retrofit/

您还可以阅读有关AsyncTask VS Volley VS Retrofit here.

的信息