2017-03-07 25 views
0

現在、私はvolleyを使用してリクエストを行い、onResponseでモデルにgsonを使用してjsonObjectを解析しようとしています。GSONを使用してネストされたJSONを解析する方法

{ 
    "success": 1, 
    "message": "Done", 
    "data": { 
      "company": "companyname", 
      "email": "email", 
      "color": "#ffffff", 
      "text_color": "#000000", 
      "background_image": "BITMAP ENCODED", 
      "logo": "BITMAP ENCODED", 
      "enable_health_and_safety": 0, 
      "health_and_safety": "", 
      "sign_in_button_text": "SIGN IN", 
      "sign_out_button_text": "SIGN OUT", 
      "enable_picture": 0, 
      "package_type": "TRIAL", 
      "created_at": "2017-03-06 12:21:23", 
      "updated_at": "2017-03-06 12:21:23", 
      "telephone": "", 
      "auto_sign_out": 0, 
      "sign_out_time": "", 
      "enable_printing": 0 
      } 
} 

マイモデル

public class ClientResponseModel implements Serializable { 
private String success; 
private String message; 
private ClientData clientData; 

public String getSuccess() { 
    return success; 
} 

public void setSuccess(String success) { 
    this.success = success; 
} 

public String getMessage() { 
    return message; 
} 

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

public ClientData getClientData() { 
    return clientData; 
} 

public void setClientData(ClientData clientData) { 
    this.clientData = clientData; 
} 

public class ClientData implements Serializable { 
    private String company; 
    private String email; 
    private String client_color; 
    private String text_color; 
    private String background_image; 
    private String logo; 
    private int enable_health_and_safety; 
    private String health_and_safety; 
    private String sign_in_button_text; 
    private String sign_out_button_text; 
    private int enable_picture; 
    private String package_type; 
    private String created_at; 
    private String updated_at; 
    private String telephone; 
    private int auto_sign_out; 
    private String sign_out_time; 
    private int enable_printing; 

    //all the getters and setters for above 
} 

マイonResponse機能

final JsonObjectRequest getClientData = new JsonObjectRequest(Request.Method.GET, clientUrl, null, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      Log.i("getUserDataOnResponse", response.toString()); 
      Gson gson = new Gson(); 
      ClientResponseModel clientResponseModel = gson.fromJson(response.toString(), ClientResponseModel.class); 


      Log.i("sucess",clientResponseModel.getSuccess()); 
      Log.i("message",clientResponseModel.getMessage()); 
      Log.i("company",clientResponseModel.getClientData().getEmail()); 

     } 

取得しようとしたとき、私はしかし、成功してメッセージを取得することができます:

JSONは、要求が行われた後に返されますclientDataからのデータです。たとえば、電子メールを取得しています。アプリがクラッシュし、次のエラーメッセージが表示されます。私は私が間違っていることができるかわからない

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ClientResponseModel$ClientData.getEmail()' on a null object reference 

は、私は、例えばいくつかのリンクで事前にすべてのヘルプのためのHow to use gson and volley parse nested json

感謝を見てきました。

+0

は' JSONObjectが、その後response'ゲッター... 'JSONをパース二回...何の廃棄物リソース – Selvin

+0

あなたのコメントをいただきありがとうございます、私は学習者であり、間違って学ぶので、私のコードを良くします.2番目のコメントは、批評家ではなく精神の助けを借りて残すことができます。 @Selvin – chirag90

+0

'@SerializedName(" data ")を試してください @Expose priva te ClientData clientData;そうでなければ、すべてのフィールドに注釈を使用する必要があります –

答えて

1

コードに間違いがあります.ClientData clientDataをClientDataデータに変更する必要があります。その後、データを取得することができます。これが解析に役立つことを願っています。

+0

ありがとうございました。このアプローチは必要に応じて機能します – chirag90

0

私はあなたのために本当に簡単なアプローチを持っている:

すべての最初は、メインモデルの作成: と「データ」の他の1

public class FeedBackModel { 
    int success; 
    String message; 
    DataModel data; 

} 

public class DataModel { 

    String company; 
    String email; 
    //etc ... 
} 

//変数のためにゲッター&セッターを作成し

あなたはJSONを得たときに、このようにそれを解析:

  Gson gson = new Gson(); 
      Type CollectionType = new TypeToken<FeedBackModel>() { 
      }.getType(); 
      FeedBackModel FeedBack = gson.fromJson(json, CollectionType); 
+0

こんにちは@Hamidは、 – chirag90

0

user1912026が言及しているように、以下のように変更してください。

private ClientData data; 

とセッターを変更し、 `gson.fromJson(response.toString()以下のように

public ClientData getClientData() { 
    return data; 
} 

public void setClientData(ClientData clientData) { 
    this.data = clientData; 
} 
関連する問題