在编写一个项目练手的时候,发现程序并没有缺少数据,也没有语法错误,部分程序如下:
private void initViewOper() {
// TODO Auto-generated method stub
//获取当前天气信息,聚合数据里查找天气信息
//发get请求 用xutilsl来使用
String url = "http://v.juhe.cn/weather/index?cityname=北京&key=4f0400b15ffec0136daf3350cb408480";
hu.send(HttpMethod.GET, url, new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
toast("获取天气资料失败");
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
String result1 = arg0.result;
if(result1 != null && result1.startsWith("\ufeff"))
{
result1 = result1.substring(1);
}
String weather_content = parseJson(result1);
weather.setText(weather_content);
}
});
}
private String parseJson(String result) {
// TODO Auto-generated method stub
try {
JSONObject jo = new JSONObject(result);//最外层
JSONObject jo1 = jo.getJSONObject("result");
JSONObject jo2 = jo1.getJSONObject("today");
return jo2.getString("weather");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "多云";
}
但是在运行过程中总是出现 一下错误:
07-19 11:19:16.180: W/System.err(587): org.json.JSONException: Value null at result of type org.json.JSONObject$1 cannot be converted to JSONObject
07-19 11:19:16.180: W/System.err(587): at org.json.JSON.typeMismatch(JSON.java:96)
07-19 11:19:16.180: W/System.err(587): at org.json.JSONObject.getJSONObject(JSONObject.java:573)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret.parseJson(newSecret.java:66)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret.access$0(newSecret.java:62)
07-19 11:19:16.180: W/System.err(587): at com.example.secretsofmy.newSecret$1.onSuccess(newSecret.java:57)
07-19 11:19:16.180: W/System.err(587): at com.lidroid.xutils.http.HttpHandler.onProgressUpdate(HttpHandler.java:218)
07-19 11:19:16.180: W/System.err(587): at com.lidroid.xutils.task.PriorityAsyncTask$InternalHandler.handleMessage(PriorityAsyncTask.java:385)
07-19 11:19:16.180: W/System.err(587): at android.os.Handler.dispatchMessage(Handler.java:99)
07-19 11:19:16.180: W/System.err(587): at android.os.Looper.loop(Looper.java:130)
07-19 11:19:16.180: W/System.err(587): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-19 11:19:16.180: W/System.err(587): at java.lang.reflect.Method.invokeNative(Native Method)
07-19 11:19:16.180: W/System.err(587): at java.lang.reflect.Method.invoke(Method.java:507)
07-19 11:19:16.180: W/System.err(587): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-19 11:19:16.180: W/System.err(587): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-19 11:19:16.180: W/System.err(587): at dalvik.system.NativeStart.main(Native Method)
可以看出是 Json 解析出来了问题,导致无法解析得到的 result数据(result包含了json数据的所有子数据)
产生这种问题的原因是 汉字需要进行URL编码:
String url = "http://v.juhe.cn/weather/index?cityname=北京&key=4f0400b15ffec0136daf3350cb408480";
改为url编码
:
String url = "http://v.juhe.cn/weather/index?cityname="
+ URLEncoder.encode("北京")
+ "&key=4f0400b15ffec0136daf3350cb408480";
这样解析过程就不会报转换错误了。