在我的应用中,当点击列表视图项时,我会触发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。我该怎么办?
答案 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