我的任务是开发一个发送服务器请求并获取响应的应用程序,然后使用 JSON 解析,将数据内容显示到 ListView 中。
我不了解 AsyncTask 以及如何集成所有类。希望你能包容。问候
我的任务是开发一个发送服务器请求并获取响应的应用程序,然后使用 JSON 解析,将数据内容显示到 ListView 中。
我不了解 AsyncTask 以及如何集成所有类。希望你能包容。问候
你该怎么办?
The first, send a request to server
The second, get response
The thirds, Parse data from InputStream which you got from Response
The fourth, show on ListView
哦,完成了。现在,看看第一步。
如何向服务器发送请求?
您可以使用HttpURLConnection或HttpClient
那么,当您向服务器发送请求时会出现什么问题?
我想你知道当你向服务器发送请求时,你会遇到一些问题:网络不好,来自服务器的 InputStream 太大,......
以及如何解决?
使用单一语句,您不能花时间去做。因此,对于需要花费时间完成的任务,您必须在其他线程中处理。这就是我们应该使用 Thread 或 AsyncTask 的原因。
什么是异步任务?
您可以通过谷歌搜索阅读更多内容。我只是告诉你:如何使用 AsyncTask 来解决你的规范。
AsyncTask是做什么的?
当您创建AsyncTask的实例时,
它将遵循:
-> 创建 -> PreExecute -> 执行 (DoInBackground) - PostExecute
好的。
现在,我来回答你的问题:
创建一个扩展 AsyncTask 的对象。
public class DownloadFile extends AsyncTask<String, Void, InputStream> {
@Override
public void onPreExecute() {
// You can implement this method if you want to prepare something before start execute (Send request to server)
// Example, you can show Dialog, or something,...
}
@Override
public InputStream doInBackground(String... strings) {
// This is the important method in AsyncTask. You have to implements this method.
// Demo: Using HttpClient
InputStream mInputStream = null;
try {
String uri = strings[0];
HttpClient mClient = new DefaultHttpClient();
HttpGet mGet = new HttpGet(uri);
HttpResponse mResponse = mClient.execute(mGet);
// There are 2 methods: getStatusCode & getContent.
// I dont' remember exactly what are they. You can find in HttpResponse document.
mInputStream = mReponse.getEntity().getContent();
} catch (Exception e) {
Log.e("TAG", "error: " + e.getMessage());
}
return mInputStream;
}
@Override
public void onPostExecute(InputStream result) {
//After doInBackground, this method will be invoked if you implemented.
// You can do anything with the result which you get from Result.
}
}
好的。现在我们必须使用这个类
在您的MainActivity或您要调用此类的地方,创建此类的实例
DownloadFile mDownloader = new DownloadFile();
mDownloader.execute("your_url");
使用方法mDownloader.get(); 如果你想得到InputStream 。但是你必须被try-catch包围
我知道,如果您想使用 Dialog,您将在 Google 上搜索如何在从服务器下载文件时显示 Dialog。
我建议你应该记住,如果你想更新 UI,你需要 runOnUiThread。因为 AsyncTask 是线程。因此,如果您在另一个不是 MainThread 的线程中,则无法更新 UI。
异步任务
AsyncTask 允许正确和轻松地使用 UI 线程。当您想在后台执行期待已久的任务时使用它。
它在 UI 线程上发布结果(将结果显示到 UI),而无需操作任何线程或处理程序。这意味着用户不必为线程管理而烦恼,一切都由自己管理。这就是为什么它被称为无痛穿线,见下文。
它也被称为无痛穿线。
AsyncTask 操作的结果在 UI 线程上发布。它基本上有 4 种方法可以覆盖:onPreExecute、doInBackground、onProgressUpdate 和 onPostExecute
永远不要指望通过参考简短的笔记成为程序员,深入学习..
在这里查看更多详细信息。