【发布时间】:2014-03-04 15:22:01
【问题描述】:
我已经构建了应用程序 android 使用 http 客户端从 URL 获取内容,
String getRequest(String SUrl){
String vResult = "TEST";
//SUrl result of "http://mydomain.com/file.php?var=21"
HttpClient client = new DefaultHttpClient();
HttpGet request;
try{
request=new HttpGet(SUrl);
HttpResponse response = client.execute(request);
vResult=request(response);
}catch(Exception ex){
Log.e("From Server", ex.getMessage());
}
return vResult;
}
public static String request(HttpResponse response){
String result = "";
try{
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null){
str.append(line + "\n");
}
in.close();
result = str.toString();
}catch(Exception ex){
result = "Error";
}
return result;
}
在 android 姜饼中,上面的代码可以很好地从服务器获取内容,但在 jelly bean 中,代码结果日志是这样的
java.lang.NullPointerException: println needs a message
即使我已经声明了所有变量,为什么我在果冻豆中得到空值?
谢谢
【问题讨论】:
-
如果
ex.getMessage()在Log.e("From Server", ex.getMessage());返回空值且具有上述NPE,则无论Android 版本如何,您的应用都会失败。 -
改成这样:Log.e("From Server", ex.getMessage()+"");
-
@ltvie 我相信你尝试在 UI 线程中请求网络并得到
NetworkOnMainThreadException,这是 HONEYCOMB 禁止的(api 级别 11)。 -
感谢您的快速响应。我的问题解决了。我想再问一遍,为什么 getMessage() 会导致我的应用程序在 Jelly bean 中出错?
-
请记住
getMessage()不是根本原因异常。有时,exception.getMessage()返回null。但是您的问题是主线程上的请求网络,这导致了NetworkOnMainThreadException(没有消息),正如我猜想的那样。
标签: java android httpclient