2016-10-20 2 views
-3

私はJSONを初めて使用しています。私は予測が配列であることを知っていますが、要素の日付とテキストにどのようにアクセスしますか?私は問題がどこにあるか知っています:これはnullを与えるので、私は予測配列へのアクセスを得ることができないようです。アクセスエレメントJavaの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" 
    }, 

私はこのような何かをしようとしていたが、私のアンドロイドアプリがクラッシュしていましたか?配列内の要素にアクセスして、いくつかのテキストフィールドにそれらの要素を設定するだけで助けが必要です。

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"); 
    } 
} 

ここではstacktraceのエラーです。

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) 
+2

アプリがクラッシュしている場合は、スタックトレースを含めてください。 – 0xDEADC0DE

+1

JSONは解析不能なので不完全であることに注意してください。 –

+0

あなたのクラッシュは投稿されたコード以外のどこかで発生することにも注意してください。 – 0xDEADC0DE

答えて

0

GSON jar translate json stringをクラスオブジェクトに使用すると、オブジェクトによってテキスト要素を取得できます。 Googleのサンプルで検索してください。