【问题标题】:access elementsJSON array in Java在 Java 中访问 elementsJSON 数组
【发布时间】: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


【解决方案1】:

定义一个 java bean 类,使用 GSON jar 将 json 字符串转换为类对象,然后你可以通过你的对象获取文本元素。请在谷歌示例中搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2014-09-17
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多