当然,您可以创建扩展 AsyncTask 的单独类来发出 HTTP 请求,这将采用适当的参数并在许多活动中重用它。您不必在每个活动中创建嵌套的私有类。您可以在doInBackground(parameters) 方法中使用AsyncTask 的输入参数。请参阅AsyncTask 的文档:http://developer.android.com/reference/android/os/AsyncTask.html
在下面,您可以看到使用AsyncTask 和一些伪代码的非常简单的示例:
public class DownloadDataTask extends AsyncTask<String, Integer, String> {
protected String doInBackground(String address) {
// you should have method for performing HTTP request
// and return result - in this case as String
String result = performHttpRequest(address);
return result;
}
protected void onPostExecute(String result) {
// this method is executed after downloading result
// now, you can perform some action - e.g. display data in a TextView
myTextView.setText(result);
}
}
在这个定义中:AsyncTask<String, Integer, String>第一个参数是输入参数的类型(在这种情况下是端点的地址),第二个参数是进度值的类型(我们在这个例子中没有使用它),最后一个参数是输出值的类型(在我们的例子中,HTTP 响应为字符串)。
当DownloadDataTask 类被放置在一个单独的文件中时,您可以通过以下调用在许多活动中重复使用它:
new DownloadDataTask().execute(address);
当然,这是带有一些伪代码的非常基本的示例。我还没有初始化TextView,也没有提供performHttpRequest() 方法的实现。您应该根据自己的需要进行调整。您还可以升级此解决方案并将引用传递给 TextView 或其他小部件,您的结果将在其中显示。
尽管如此,考虑使用 RxJava 和 RxAndroid 而不是 AsyncTask。它将使您的应用程序更简单,更不容易出错。我不推荐使用AsyncTask,因为我们现在有很多更好的安卓解决方案。不管这个事实如何,您可以决定在您的项目中使用哪种解决方案。