如何在我的doInBackground方法中成功实现OnPostExecute方法?

时间:2016-06-24 21:46:04

标签: android

下面提到的是我的JSONTask.java类:

public class JSONTask extends AsyncTask<String,String,String> {


public TextView tvData;

@Override
protected String doInBackground(String... params) {
    BufferedReader reader=null;
    HttpURLConnection connection= null;
    try {
        URL url =new URL(params[0]);
        connection= (HttpURLConnection) url.openConnection();
        connection.connect();

        InputStream stream = connection.getInputStream();
        reader = new BufferedReader(new InputStreamReader(stream));
        StringBuffer buffer = new StringBuffer();
        String line="";
        while ((line=reader.readLine())!=null)
        {
            buffer.append(line);
        }

        return buffer.toString();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if (connection != null) {
            connection.disconnect();
        }

        try {
            if (reader != null)
            {
                reader.close();
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
    return null;
}
@Override
protected void onPostExecute(String result) {
    super.onPostExecute(result);
    tvData.setText(result);
}

}

当调用此项时我的应用程序崩溃,我在logcat中收到以下错误:&#34;尝试调用虚方法&#39; void android.widget.TextView.setText(java.lang.CharSequence)&#39;在null对象引用&#34; at .fragment.JSONTask.onPostExecute(JSONTask.java:63)。它指向OnPostExecute方法。

我对编程非常陌生,并且已经在这里停留了一段时间。请帮忙。

2 个答案:

答案 0 :(得分:1)

这是正常的NullPointerException。您的TextView tvData之前尚未初始化。

答案 1 :(得分:1)

semms的问题是TextView为null。也许,你不要从片段中设置这个字段。 Pr,你在创建的片段中创建了这个asynctask,它立即失败,所以视图还没有膨胀。尝试通过try-catch包围它,如果textview为null,请在调试器中查看