2016-10-06 3 views
-2

Ich verwende von retrofit 2 in meinem Projekt, hol mich in meinem Projekt unten Fehler:Nachrüstung 2 Fehler BEGIN_ARRAY - Android?

java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ 

hier ist mein RequestInterface_ListAddress:

public interface RequestInterface_ListAddress { 
    @GET("/courier.svc/allorderforcourier/{key}") 
    Call<JSONResponseAddressList> getJSONAddress(@Path("key") String key); 
} 

Und:

public class JSONResponseAddressList { 
    private ModelAddressList[] AddressList; 

    public ModelAddressList[] getAddressList() { 
     return AddressList; 
    } 

    public void setAddressList(ModelAddressList[] addressList) { 
     AddressList = addressList; 
    } 
} 

Und:

public class ModelAddressList { 
    private String Address; 
    private String Area; 
    private String ID; 
    private String Post_Payment; 
    private String Total_Off; 
    private String Total_Payable; 
    private String Total_Price; 
    private String X; 
    private String Y; 
    private String cDate; 
    private String cTime; 
    private Integer response; 

    public String getAddress() { 
     return Address; 
    } 

    public String getArea() { 
     return Area; 
    } 

    public String getID() { 
     return ID; 
    } 

    public String getPost_Payment() { 
     return Post_Payment; 
    } 

    public String getTotal_Off() { 
     return Total_Off; 
    } 

    public String getTotal_Payable() { 
     return Total_Payable; 
    } 

    public String getTotal_Price() { 
     return Total_Price; 
    } 

    public String getX() { 
     return X; 
    } 

    public String getY() { 
     return Y; 
    } 

    public String getcDate() { 
     return cDate; 
    } 

    public String getcTime() { 
     return cTime; 
    } 

    public Integer getResponse() { 
     return response; 
    } 
} 

In meiner Tätigkeit Klasse:

private void loadJSONObjectAddress(String key) { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl("http://192.168.8.11:8087/") 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 
     RequestInterface_ListAddress requestAddress = retrofit.create(RequestInterface_ListAddress.class); 
     Call<JSONResponseAddressList> callAddress = requestAddress.getJSONAddress(key); 
     callAddress.enqueue(new Callback<JSONResponseAddressList>() { 
      @Override 
      public void onResponse(Call<JSONResponseAddressList> call, Response<JSONResponseAddressList> response) { 
       JSONResponseAddressList JSA = new JSONResponseAddressList(); 
       data = new ArrayList<>(Arrays.asList(JSA.getAddressList())); 
       for (int i = 0; i < data.size(); i++) { 
        Log.i("LOG", data.get(i).getcTime()); 
       } 
      } 

      @Override 
      public void onFailure(Call<JSONResponseAddressList> call, Throwable t) { 
       Log.i("LOG", t.getMessage()); 
      } 
     }); 
    } 

Und mein Json ist:

[{"Address":"address", 
"Area":"area", 
"ID":"1395042722592466", 
"Post_Payment":"15,000", 
"Total_Off":"0", 
"Total_Payable":"334,600", 
"Total_Price":"334,600", 
"X":"34.657805", 
"Y":"50.878026", 
"cDate":"2000\/04\/27", 
"cTime":"22:59:23", 
"response":0 
},{ 
"Address":"address", 
"Area":"area", 
"ID":"13950706165751439", 
"Post_Payment":"10,000", 
"Total_Off":"0", 
"Total_Payable":"11,700", 
"Total_Price":"11,700", 
"X":"34.659368", 
"Y":"50.886652", 
"cDate":"2000\/07\/06", 
"cTime":"16:57:51", 
"response":0 
},{ 
"Address":"address", 
"Area":"area", 
"ID":"13950706165554790", 
"Post_Payment":"10,000", 
"Total_Off":"0", 
"Total_Payable":"246,500", 
"Total_Price":"246,500", 
"X":"34.659368", 
"Y":"50.886652", 
"cDate":"2000\/07\/06", 
"cTime":"16:55:54", 
"response":0 
}] 
+0

google einfach Ihre Fehlermeldung – njzk2

Antwort

1

Verwendung "Arraylist" statt "JSONResponseAddressList" wie:

Call<ArrayList<ModelAddressList>> callAddress = requestAddress.getJSONAddress(key); 
callAddress.enqueue(new Callback<ArrayList<ModelAddressList>>() { 
    @Override 
    public void onResponse(Call<ArrayList<ModelAddressList>> call, Response<ArrayList<ModelAddressList>> response) { 
    ....   
    } 

    @Override 
    public void onFailure(..) { 
     //TODOS 
    } 
}); 

}

und In RequestInterface_ListAddress:

public interface RequestInterface_ListAddress { 
    @GET("/courier.svc/allorderforcourier/{key}") 
    Call<ArrayList<ModelAddressList>> getJSONAddress(@Path("key") String key); 
} 
3

Es klingt für mich wie Sie ein Objekt erwartet, bekam aber wieder ein Array.

teilweise erwartet Sie JSONResponseAddressList. Aber es ist mehr als wahrscheinlich, dass Sie ModelAddressList[] bekommen.

Code ändern erwartete Antwort zu reflektieren ModelAddressList[]

+0

Können Sie meinen Code bearbeiten? –

+1

@JoJoRoid Ich bin mit Retrofit nicht vertraut, aber ich bin an JSON und Restdienste usw. gewöhnt. Ich glaube Orte wie 'Reponse ' müssen zu 'Reponse ' wechseln. Irgendwelche Orte mit den dreieckigen Klammern, die sich auf Antworttyp beziehen. Ich denke auch, dass Ihr Antwortcode falsch ist, da Sie den Antwortparameter überhaupt nicht verwenden. Sie verwenden stattdessen 'JSA'. – Doomsknight

0

Sie die Antwort zu sehen sein wird in [] jsonarray wenn Sie JSONResponseAddressList dies als Modell passieren dann Gson für JSONObject suchen, aber es gibt kein JSON-Objekt, wenn Ihre Antwort beginnen mit {} dann und dann müssen Sie wie die
schreiben, so im Grunde müssen Sie dies unter
Call<ModelAddressList[]> callAddress = ...
und
Call<ModelAddressList[]> getJSONAddress(@Path("key") String key)

-1

Versuchen Sie, ändern, dass Ihre pojo mod zu überprüfen el genau die json widerspiegeln. Sie können Online-Dienst wie www.jsonschema2pojo.org verwenden usw.

EDIT: In diesem Fall, wie erwähnt @Heena_Arora verwenden ArrayList<ModelAddressList>

Verwandte Themen