2017-09-09 8 views
0

をObjectに解析します。私はJavaのアンドロイドモシは、JSONは、私がObjectにJSONを解析するモシを使用

Message message = App.getMsg().fromJson(new String(responseBody, "UTF-8")); 

をしかし、私のアプリがクラッシュし、ログに:

[{ 
    "id": 4, 
    "phone": { 
     "id": 3, 
     "imei": "356938035643801", 
     "description": "Marek Kowalski" 
    }, 
    "user": { 
     "id": 3, 
     "username": "marek.kowalski", 
     "first_name": "Marek", 
     "last_name": "Kowalski" 
    }, 
    "user_id": 3, 
    "message": "Podejrzane zachowanie, sprawdĹş.", 
    "date_time_data": "2017-09-05T22:26:44.916927Z", 
    "longitude": 19.934113, 
    "latitude": 50.075086, 
    "confirm": 0, 
    "changetime": "2017-09-05T22:26:44.930357Z", 
    "has_coordinates": 1 
}] 

これは私のオブジェクトである:これは私のJSONある

public class Message { 

    String message; 
    double longitude; 
    double latitude; 
    int confirm; 

    public String getMessage() { 
     return message; 
    } 

    public void setMessage(String message) { 
     this.message = message; 
    } 

    public double getLongitude() { 
     return longitude; 
    } 

    public void setLongitude(double longitude) { 
     this.longitude = longitude; 
    } 

    public double getLatitude() { 
     return latitude; 
    } 

    public void setLatitude(double latitude) { 
     this.latitude = latitude; 
    } 

    public int getConfirm() { 
     return confirm; 
    } 

    public void setConfirm(int confirm) { 
     this.confirm = confirm; 
    } 
} 

そして私はobecjtするJSONを解析するためにこれをしましたこれを参照してください。

ユーザ空間の例外が検出されました! com.squareup.moshi.JsonDataException:期待BEGIN_OBJECTだがcom.squareup.moshi.ClassJsonAdapter.fromJson(ClassJsonAdapterでcom.squareup.moshi.BufferedSourceJsonReader.beginObject(BufferedSourceJsonReader.java:171) のパス$ で BEGIN_ARRAYました。 java:145) com.square.moshi.JsonAdapter $ 1.fromJson(JsonAdapter.java:68) at com.square.moshi.JsonAdapter.fromJson(JsonAdapter.java:33) at com.squareup.moshi.JsonAdapter .fromJson(JsonAdapter.java:37) jaceknikiel.apk.MsgActivity $ 1.onSuccess(MsgActivity.java:37) at com.loopj.android.http.AsyncHttpResponseHandler.handleMessage(Asy android.os.Handler.dispatchMessageでcom.loopj.android.http.AsyncHttpResponseHandler $ ResponderHandler.handleMessage(AsyncHttpResponseHandler.java:510) (Handler.java:102)android.osで でncHttpResponseHandler.java:351) 。 Looper.loop(Looper.java:154) android.app.ActivityThread.main(ActivityThread.java:6692) at java.lang.reflect.Method.invoke(ネイティブメソッド) at com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)で(ZygoteInit.java:1468)

+1

代わりに 'メッセージmessage'での'一覧 message'で使用すると、オブジェクト – Raghunandan

答えて

2

問題は、あなたがMessageオブジェクトを求めているが、あなたが実際に配列Messageのオブジェクトを持っているということです。これをやってみてください。

String jsonResponseBody = ...; 
Type type = Types.newParameterizedType(List.class, Message.class); 
JsonAdapter<List<Message>> adapter = moshi.adapter(type); 
List<Message> messages = adapter.fromJson(jsonResponseBody); 
+0

おかげで多くの配列を持っているので。今は仕事です –