【发布时间】:2016-10-23 11:11:25
【问题描述】:
我是 JSON 新手。我知道预测是一个数组,但是如何访问元素日期和文本?我知道问题出在哪里:似乎我无法访问预测数组,因为这给出了一个空值。
JSONArray jArr = data.getJSONArray("forecast");
访问预测数组的正确符号是什么。我在尝试
`JSONArray jArr = data.getJSONObject("item").getJSONObject("condition").getJSONArray("forecast");
但是这个符号仍然没有让我访问数组。什么表示法会给我对预测数组的正确参考?
"item": {
"title": "Conditions for Kingston, Saint Andrew, JM at 09:00 PM EST",
"lat": "18.015711",
"long": "-76.79731",
"link": "http://us.rd.yahoo.com/dailynews/rss/weather/Country__Country/*https://weather.yahoo.com/country/state/city-109251/",
"pubDate": "Sat, 22 Oct 2016 09:00 PM EST",
"condition": {
"code": "27",
"date": "Sat, 22 Oct 2016 09:00 PM EST",
"temp": "77",
"text": "Mostly Cloudy"
},
"forecast": [
{
"code": "32",
"date": "20 Oct 2016",
"day": "Thu",
"high": "35",
"low": "26",
"text": "Sunny"
},
{
"code": "34",
"date": "21 Oct 2016",
"day": "Fri",
"high": "34",
"low": "28",
"text": "Mostly Sunny"
},
{
"code": "26",
"date": "22 Oct 2016",
"day": "Sat",
"high": "37",
"low": "32",
"text": "Cloudy"
},
{
"code": "23",
"date": "23 Oct 2016",
"day": "Sun",
"high": "37",
"low": "34",
"text": "Breezy"
},
我正在尝试这样的事情,但我的 android 应用程序崩溃了?我只需要帮助来访问数组中的元素以将它们设置在某些文本字段上。
public void populate(JSONObject data) throws JSONException {
JSONArray jArr = data.getJSONArray("forecast");
for(int i=0;i<jArr.length();i++){
JSONObject jDayForecast = jArr.getJSONObject(i);
String date = jDayForecast.getString("date");
String text = jDayForecast.getString("text");
}
}
这是堆栈跟踪中的错误。
54.516 27220-27220/net.digitalphantom.app.weatherapp E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.digitalphantom.app.weatherapp, PID: 27220
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String net.JamCast.app.weatherapp.data.Forecast.getDate()' on a null object reference
at net.JamCast.app.weatherapp.WeatherActivity$override.serviceSuccess(WeatherActivity.java:363)
at net.JamCast.app.weatherapp.WeatherActivity$override.access$dispatch(WeatherActivity.java)
at net.JamCast.app.weatherapp.WeatherActivity.serviceSuccess(WeatherActivity.java:0)
at net.JamCast.app.weatherapp.service.YahooWeatherService$1.onPostExecute(YahooWeatherService.java:95)
at net.JamCast.app.weatherapp.service.YahooWeatherService$1.onPostExecute(YahooWeatherService.java:37)
at android.os.AsyncTask.finish(AsyncTask.java:651)
at android.os.AsyncTask.access$500(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
【问题讨论】:
-
如果应用程序崩溃,请包含堆栈跟踪。你的代码看起来不错
-
请注意,您的 JSON 不完整,甚至无法解析。
-
另请注意,您的崩溃发生在您发布的代码之外的其他地方
-
@0xDEADC0DE 请查看我对问题的更新,似乎我无法正确引用预测数组。
标签: java android arrays json getjson