AsyncTask和Activity之间有什么关系?

时间:2013-08-16 09:09:51

标签: android

我已经获得了一项任务,即开发一个发送服务器请求并获得响应的应用程序,然后使用JSON解析,将数据内容显示到ListView中。

我不了解AsyncTask以及如何集成所有类。希望你能适应。 问候

5 个答案:

答案 0 :(得分:2)

检查此链接..这将解决您的问题。

see this link

答案 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)

首先看一下官方文档here。然后,您可以查看this教程并发布您将要提出的问题。

由于

答案 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以获取更多详细信息。