6

我试图创建一个 AsyncTask 来从服务器端获取一些数据。但它在“IOUtils.copy((response_.getEntity().getContent()), writer);”行的 onPostExecute() 中报告了 Null 指针异常。我使用一些日志来查看发生了什么,发现日志 1 和 3 已打印但日志 2 没有。为什么 onPostExecute 在 client.executed() 完成之前执行?任何人都可以提供一些建议吗?

private class GetForm extends AsyncTask<String, Integer, Object> {
    private HttpResponse response_;
    private Exception exception_;
    private String url_;

    public GetForm(String url) {
        super();
        url_ = url;
    }
    protected Object doInBackground(String... params) {
        try {
            Log.i("mylog","inside doInbackground 1.");
            HttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet(url_);
            response_ = client.execute(request);
                            Log.i("mylog","inside doInbackground 2.");

        } catch (Exception e) {
            exception_ = e;
        }
        return response_;
    }
    @Override
    protected void onPostExecute(Object o) {
        // Your current UI stuff here.
        Log.i("mylog","inside onPostExecute 3.");
        StringWriter writer = new StringWriter();
        try{
            IOUtils.copy((response_.getEntity().getContent()), writer);
        ......

        }catch(IOException e) {
            e.printStackTrace();
        }
    }
}
4

2 回答 2

5

不太可能首先调用 onPostExecute() ,更有可能是在您的 doInBackground() 中引发了异常......以及未打印 Log 2 的原因。检查 LogCat 中的警告或调试页面。此外,您应该分别打印这两个异常。

于 2012-10-13T04:02:17.630 回答
1

onPostExecute()以前永远无法执行doInBackground()

您必须知道,doInBackground()无论您调用什么,它都只会在异步线程/任务中执行。和onPostExecute()在主 UI 线程本身中执行。

显示您是如何在代码中调用此任务的。

您必须检查的主要事项是您不得使用从AsyncTaskMain中获取的任何数据UIThread除非您确定Asynctask已完成

因为它有可能在AsyncTask完成之前执行,并且您肯定会遇到NULLException这种情况。

于 2012-10-13T07:14:28.413 回答