从Web加载数据导致错误

时间:2014-10-15 15:07:03

标签: java android

在我的应用中,当点击列表视图项时,我会触发onItemClick(..)列表器。在那种情况下,我使用以下代码从网页加载数据: -

try {
        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpGet httpGet = new HttpGet("http://www.spartanjava.com");
        HttpResponse response = httpClient.execute(httpGet, localContext);
        String result = "";
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(
              response.getEntity().getContent()
            )
          );
        String line = null;
        while ((line = reader.readLine()) != null){
          result += line + "\n";
        }
} catch (Exception e) {
    tv.setText("Error : "+e.getMessage());//tv is a textview
    Toast.makeText(getApplicationContext(), "No connection", Toast.LENGTH_LONG).show();
    e.printStackTrace();
}

我在类路径中包含了以下jar: -

commons-codec-1.6.jar
commons-logging-1.1.3.jar
httpclient-4.3.3.jar
httpclient-cache-4.3.3.jar
httpcore-4.3.2.jar
httpmime-4.3.3.jar

我的<uses-permission android:name="android.permission.INTERNET"/>文件中有权限AnroidManifext.xml。我收到的输出就是catch-block中的所有输出。 textview设置为值"Error : null"并且会触发toast。我该怎么办?

2 个答案:

答案 0 :(得分:1)

也许response.getEntity()返回null。

当您尝试通过getContent()在实体上获取InputStream时,不检查实体是否为null,它可能会触发NullPointerException。

修改

抛出NetworkOnMainThreadException,你必须在一个线程中进行网络操作,如下例所示:How to fix android.os.NetworkOnMainThreadException?

答案 1 :(得分:1)

你的异常实际上告诉你你做错了什么。您没有使用其他线程来执行NetworkOperations

连接到网址的代码应该在 UI-Thread 之外的 AsyncTasks doInBackground()方法中执行。

有关详细信息,请参阅android.os.NetworkOnMainThreadException