Retrofit Expected Begin_Object But Was Begin_Array

Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY

Right now you are parsing the response as if it was formatted like this:

{
"contacts": [
{ .. }
]
}

The exception tells you this in that you are expecting an object at the root but the real data is actually an array. This means you need to change the type to be an array.

The easiest way is to just use a list as the direct type in the callback:

@GET("/users.json")
void contacts(Callback<List<User>> cb);

Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY in GET method

Here i edited your code:

public interface ApiInterface {
@GET("api/category")
Call<List<Category>> getBusinessCategory();
}

Your api returns Array but you are trying to cast it to a single object.

Edit:

  private Call<List<Category>> mCall;
mCall = apiService.getBusinessCategory();
mCall.enqueue(new Callback<List<Category>>() {
@Override
public void onResponse(Call<List<Category>> call, Response<List<Category>> response) {

if (response.isSuccess()) {
Log.e(TAG, response.toString());

} else {
Toast.makeText(getApplication(), "No conexion", Toast.LENGTH_SHORT).show();
}
}

@Override
public void onFailure(Call<List<Category>> call, Throwable t) {
Log.e(TAG, t.toString());
}
});

OkHttp / Retrofit / Gson: Expected BEGIN_OBJECT but was BEGIN_ARRAY

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

As the error clearly says, you are trying to parse JSONArray into a JSONObject

@GET("characters/house/{house}")
Call<Data> getPersonajes(@Path("house") String house);

This service method expecting JSONObject, but according the logcat shared by in the image, the response is giving JSONArray. Instead you should parse it as:

@GET("characters/house/{house}")
Call<List<Personaje>> getPersonajes(@Path("house") String house)

Expected BEGIN_OBJECT but was BEGIN_ARRAY but the json respone has already an object

You are using the wrong model. according to your json output, your model must be the below classes

public class Output{

public Status status;
public List<RiceField> riceField;

}

public class RiceField {

public Integer id;
public String title;
public Integer harga;
public Integer luas;
public String alamat;
public String maps;
public String deskripsi;
public String sertifikasi;
public String tipe;
public String createdAt;
public String updatedAt;
public Integer userId;
public Integer vestigeId;
public Integer irrigationId;
public Integer regionId;
public Integer verificationId;

}

public class Status {

public Integer code;
public String message;
public String description;

}

for more information use this website :
json to java class

Retrofit Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path when want to retrieve certain data in the list

This is because you received an Array or Object from Api response but when you parse it with the wrong type like receive an Array but you parse it using Object or receive Object and parse it with an Array.

In your case, SPSOnHand model class should be an Array.

Your service should be

@GET("/api/SPSOnHand/itemcode/{item_code}")
public void getItemCode(@Path("item_code") String itemcode, Callback<ArrayList<SPSOnHand>> callback);

based on this you have to update your request and response.

Expected BEGIN_OBJECT but was BEGIN_ARRAY Retrofit

The Square brackets reflects that there is array of objects, so please use the below code

@GET(".../playlists")
Call<ArrayList<FDYPlaylists>> getPlaylists(@HeaderMap Map<String, String> headers);

Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $ - Retrofit2 with RxJava handling JSONArray response

You can either do:

    @GET("posts")
fun getNewsItems(
@Query("_fields") key: String,
@Query("per_page") part: String,
@Query("categories") category: String
): Observable<List<NewsItemModel>>

or update your definition of NewsItemModels to:

typealias NewsItemModels = List<NewsItemModel>

The error message:

Expected BEGIN_OBJECT but was BEGIN_ARRAY at path $

comes from Gson, and it's telling you that based on the way you defined the getNewsItems it's expecting an object (you defined NewsItemModels as a class) but it's getting an array.

In your example JSON the received payload it's an array so you need to update the return type to either inline the List or use a typealias.

kotlin retrofit expected begin_array but was begin_object at line 1

This error is because you have declared source in Articles model class as Arraylist. But in actual response, it is coming as an object.

So just modify your Articles class.

Replace these lines

@Expose
@SerializedName("source")
var source = ArrayList<Source>()

with these ones

@Expose
@SerializedName("source")
var source :Source? = null
//or
var source = Source()


Related Topics



Leave a reply



Submit