我已经获得了一项任务,即开发一个发送服务器请求并获得响应的应用程序,然后使用JSON解析,将数据内容显示到ListView中。
我不了解AsyncTask以及如何集成所有类。希望你能适应。 问候
答案 0 :(得分:2)
检查此链接..这将解决您的问题。
答案 1 :(得分:2)
你应该怎么做?
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
那么,当您向服务器发送请求时会出现什么问题?
我想您知道当您向服务器发送请求时,您会遇到一些问题:网络错误,Server的InputStream太大,...
如何解决?
单一陈述,你不能花时间去做。因此,对于需要花费时间的任务,您必须处理其他线程。这就是我们应该使用Thread或AsyncTask的原因。
什么是 AsyncTask ?
您可以在Google上通过搜索了解更多信息。我只是告诉你:如何使用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,那么您需要运行RunUnThread。 因为AsyncTask是Thread。因此,如果您在另一个不是MainThread的线程中,则无法更新UI。
答案 2 :(得分:0)
答案 3 :(得分:0)
阅读Android开发者关于AsyncTask的官方文档。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 4 :(得分:0)
AsyncTask
AsyncTask可以正确,轻松地使用UI线程。当你想在后台执行期待已久的任务时使用它。
它在UI线程上显示结果(显示结果到UI),而不必操纵任何线程或处理程序。这意味着用户不打扰线程管理,一切都由自己管理。这就是为什么它被称为无痛线程,见下文。
它也被称为无痛线程。
AsyncTask操作的结果发布在UI线程上。它基本上有4种方法可以覆盖: onPreExecute,doInBackground,onProgressUpdate和onPostExecute
永远不要指望通过引用简短的笔记成为程序员,深入学习..
查看here以获取更多详细信息。