Я пытаюсь использовать модификацию, чтобы получить данные из API, которые возвращают объект json, а не массив json, но вызов выдает сообщение об ошибке, печальное ожидание массива json, а не объекта json, могу ли я что-нибудь сделать ,
Могу ли я использовать другой способ получить данные из облака, кроме модернизации и установить body.value для viewModel
Примечание: я пытался присвоить моему вызову имя для сериализации, но оно не работает
Код API
package com.city.coding.viewmodelwithretrofit;
import com.city.coding.viewmodelwithretrofit.model.Voucher;
import com.google.gson.annotations.SerializedName;
import org.json.JSONObject;
import java.util.List;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
public interface Api {
public static final String BASE_VOUCHER_URL = "http://example.com/loycher/api/";
public static final String BASE_SIGNUP_USER_URL ="http://example.com/loycher/api/";
@SerializedName("list_of_voucher")
@GET("voucher_list.php")
Call<List<Voucher>> getVoucherList(@Query("user_id") int user_id);
Ваучер модель POJO
package com.city.coding.viewmodelwithretrofit.model;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Voucher {
@SerializedName("voucher_id")
@Expose
private String voucherId;
@SerializedName("voucher_name")
@Expose
private String voucherName;
@SerializedName("voucher_qty")
@Expose
private String voucherQty;
@SerializedName("voucher_value")
@Expose
private String voucherValue;
@SerializedName("voucher_img")
@Expose
private String voucherImg;
/**
* No args constructor for use in serialization
*/
public Voucher() {
}
/**
* @param voucherValue
* @param voucherName
* @param voucherQty
* @param voucherImg
* @param voucherId
*/
public Voucher(String voucherId, String voucherName, String voucherQty, String voucherValue, String voucherImg) {
super();
this.voucherId = voucherId;
this.voucherName = voucherName;
this.voucherQty = voucherQty;
this.voucherValue = voucherValue;
this.voucherImg = voucherImg;
}
public String getVoucherId() {
return voucherId;
}
public void setVoucherId(String voucherId) {
this.voucherId = voucherId;
}
public String getVoucherName() {
return voucherName;
}
public void setVoucherName(String voucherName) {
this.voucherName = voucherName;
}
public String getVoucherQty() {
return voucherQty;
}
public void setVoucherQty(String voucherQty) {
this.voucherQty = voucherQty;
}
public String getVoucherValue() {
return voucherValue;
}
public void setVoucherValue(String voucherValue) {
this.voucherValue = voucherValue;
}
public String getVoucherImg() {
return voucherImg;
}
public void setVoucherImg(String voucherImg) {
this.voucherImg = voucherImg;
}
}
MyViewModel class
package com.city.coding.viewmodelwithretrofit;
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
import android.support.annotation.NonNull;
import android.util.Log;
import com.city.coding.viewmodelwithretrofit.model.Voucher;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class voucherViewModel extends ViewModel {
private String TAG = "voucherViewModel";
private MutableLiveData<List<Voucher>> voucherMutableList;
public LiveData<List<Voucher>> getVoucher(int user_id) {
if (voucherMutableList == null) {
voucherMutableList = new MutableLiveData<>();
loadVoucher(user_id);
}
return voucherMutableList;
}
private void loadVoucher(int user_id) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Api.BASE_VOUCHER_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api api = retrofit.create(Api.class);
Call<List<Voucher>> call = api.getVoucherList(user_id);
call.enqueue(new Callback<List<Voucher>>() {
@Override
public void onResponse(Call<List<Voucher>> call, Response<List<Voucher>> response) {
Log.e(TAG, "onResponse: " + call.request().url());
Log.e(TAG, "onResponse: " + response.toString());
voucherMutableList.setValue(response.body());
}
@Override
public void onFailure(Call<List<Voucher>> call, Throwable t) {
Log.e(TAG, "onResponse: " + call.request().url());
Log.e(TAG, "onFailure: " + t.getCause());
Log.e(TAG, "onFailure: " + t.getLocalizedMessage());
Log.e(TAG, "onFailure: " + t.getMessage());
Log.e(TAG, "onFailure: " + t.toString());
}
});
}
}
Сообщение Logcat
01-14 14:51:09.189 12189-12189/? E/voucherViewModel: onFailure: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
01-14 14:51:09.189 12189-12189/? E/voucherViewModel: onFailure: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
01-14 14:51:09.189 12189-12189/? E/voucherViewModel: onFailure: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $