2016-08-16 1 views
1

Ich habe Retrofit 2 für ein Projekt verwendet und ich kann die Antwort von Json nicht analysieren.Erwartete BEGIN_ARRAY aber war BEGIN_OBJECT in Nachrüstung 2?

Retrofit retrofit = new Retrofit.Builder().baseUrl("BASE_URL").addConverterFactory(GsonConverterFactory .create()).build(); 
final RetrofitApi request = retrofit.create(RetrofitApi.class); 
LoginModel loginModel = new LoginModel("[email protected]",[email protected]#"); 
Call<List<LoginResponse>> listCall = request.Loginner(loginModel); 
listCall.enqueue(new Callback<List<LoginResponse>>() { 
     @Override 
     public void onResponse(Call<List<LoginResponse>> call, Response<List<LoginResponse>> response) { 
      List<LoginResponse> loginModelList = new ArrayList<>(); 
      loginModelList = response.body(); 

Die json Antwort war wie

{ 
     "response": { 
     "errorCode": "", 
     "errorMsg": "", 
     "successCode": "SUB001", 
     "successMsg": "Login successfully", 
     "data": { 
      "user_details": { 
      "salutation": "Mr.", 
      "first_name": "User", 
      "last_name": "R", 
      "email": "[email protected]", 
      "alternative_email": "", 
      "mobile_number": "54312", 
      "phone_number": "", 
      "title_position": "", 
      "department": "", 
      "city": "", 
      "street": "", 
      "state": "", 
      "postcode": "", 
      "display_name": "Bijoy R", 
      "assistant_details": "", 
      "country_name": "India", 
      "institution_name": "KLO", 
      "user_type": "commercial" 
      }, 
      "payment_details": [ 
      { 
       "dateandtime": "28-07-2016 17:4736", 
       "payment_mode": "DD", 
       "items": "Accompanying Person", 
       "transactionId": "", 
       "amount": "3000.00", 
       "status": "Failed" }  ], 
     } 
     } 
    } 

Wie für diese Art von json Getter und Setter zu schreiben.

+0

bitte, show 'LoginResponse' Klasse –

+0

haben Sie Ihre Json Antwort von Protokollen erhalten? Ihre Pojo-Klasse scheint in Ordnung zu sein. Sie müssen sicherstellen, dass "Zahlungsdetails" Array als Antwort vom Server ist. –

+0

ya ich bekomme Antwort erfolgreich, aber kann es nicht analysieren, weil Retrofit zeigt, dass BEGIN_ARRAY aber war .. –

Antwort

4

Versuch zu ersetzen Call<List<LoginResponse>> mit Call<LoginResponse> und Response<List<LoginResponse>> zu Response<LoginResponse>

+0

Dies funktioniert, alle meine Modellklasse werden mit DTO-Plugin generiert. Dank bro! :) –

0

Änderung des Retrofit-API-Schnittstelle Rückgabetyp Call<ServerResponse<LoginResponse>> ist, fllow diesen Code:

public class ServerResponse<T> { 

    private ResponseStatus response; 
    private T data; 

    public ResponseStatus getResponse() { 
     return response; 
    } 

    public void setResponse(ResponseStatus response) { 
     this.response = response; 
    } 

    public T getData() { 
     return data; 
    } 

    public void setData(T data) { 
     this.data = data; 
    } 
} 

public class ResponseStatus { 

    private String errorCode; 
    private String errorMsg; 
    private String successCode; 
    private String successMsg; 

    public String getErrorCode() { 
     return errorCode; 
    } 

    public void setErrorCode(String errorCode) { 
     this.errorCode = errorCode; 
    } 

    public String getErrorMsg() { 
     return errorMsg; 
    } 

    public void setErrorMsg(String errorMsg) { 
     this.errorMsg = errorMsg; 
    } 

    public String getSuccessCode() { 
     return successCode; 
    } 

    public void setSuccessCode(String successCode) { 
     this.successCode = successCode; 
    } 

    public String getSuccessMsg() { 
     return successMsg; 
    } 

    public void setSuccessMsg(String successMsg) { 
     this.successMsg = successMsg; 
    } 
} 

public class LoginResponse { 

    @SerializedName("userDetails") 
    private User userDetails; 

    @SerializedName("payment_details") 
    private List<PaymentDetail> paymentDetails; 

    public User getUserDetails() { 
     return userDetails; 
    } 

    public void setUserDetails(User userDetails) { 
     this.userDetails = userDetails; 
    } 

    public List<PaymentDetail> getPaymentDetails() { 
     return paymentDetails; 
    } 

    public void setPaymentDetails(List<PaymentDetail> paymentDetails) { 
     this.paymentDetails = paymentDetails; 
    } 
} 

public class User { 
    /** 
    * Ignore implement 
    */ 
} 

public class PaymentDetail { 
    /** 
    * Ignore implement 
    */ 
} 

Verwendung obiges Beispiel Ihre Modellklasse zu schreiben, um das JSON-Antwort-Format bezogen. Ich empfehle Ihre JSON-Antwort CamelCase-Stil verwenden, besser mit GSON kombinieren. Es tut mir leid, mein Englisch ist so begrenzt.

Verwandte Themen