Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何修复此错误java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$_Android_Json_Gson_Retrofit2 - Fatal编程技术网

Android 如何修复此错误java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$

Android 如何修复此错误java.lang.IllegalStateException:应为BEGIN_数组,但在第1行第2列路径处为BEGIN_对象$,android,json,gson,retrofit2,Android,Json,Gson,Retrofit2,我正在使用Android实现一个restful客户端。我有API URL,令牌等。我实现这个应用程序使用改造2库,所有都是正确的。但是JSON值不能正确显示。我试过几种方法来解决这个问题,但找不到任何正确的解决方法 这是我的代码: JSON字符串 {"deposits":[{"id":806638,"amount":100,"status":"Canceled","reason":null},{"id":814436,"amount":1,"status":"Approved","reason"

我正在使用Android实现一个restful客户端。我有API URL,令牌等。我实现这个应用程序使用改造2库,所有都是正确的。但是JSON值不能正确显示。我试过几种方法来解决这个问题,但找不到任何正确的解决方法

这是我的代码:

JSON字符串

{"deposits":[{"id":806638,"amount":100,"status":"Canceled","reason":null},{"id":814436,"amount":1,"status":"Approved","reason":null},{"id":814452,"amount":1,"status":"Approved","reason":null},{"id":814505,"amount":1,"status":"Approved","reason":null}]}
主要活动

void getRetrofitArray() {

    final String API_BASE_URL = "https://www.example.com/";
    final String credentials = "Bearer dfdfdfdlcdvksbdjsbdlvffdfddfdfdfjloiulfjuktj92p0JTFwJuFHlObIlWn8feQ_WA";
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .addInterceptor(new okhttp3.Interceptor() {
                @Override
                public Response intercept(okhttp3.Interceptor.Chain chain) throws IOException {

                    Request request = chain.request().newBuilder()
                            .addHeader("Authorization", credentials)
                            .addHeader("Accept", "application/json").build();

                    return chain.proceed(request);

                }
            }).addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
            .readTimeout(60, TimeUnit.SECONDS)
            .connectTimeout(60, TimeUnit.SECONDS)
            .build();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build();


    LoginApi service = retrofit.create(LoginApi.class);



    Call <List <Users>>call = service.getDeposits();
    Log.d("onResponse", "There is an xlllllllllllllllllllllkkkkkkklll");
    call.enqueue(new Callback<List<Users>>(){
        @Override
        public void onResponse(Call<List<Users>>call, retrofit2.Response<List<Users>>response) {

            try {

              // Users   UserData = response.body();
                List <Users> UserData =response.body();

                //String jsonString= response.body().toString();
               // Type listType = new TypeToken<List<Users>>(){}.getType();

                                      for (int i = 0; i < UserData.size(); i++) {

                     text_marks_1.setText("StudentMarks  : " +UserData.get(i).getDeposits());


                   // else if (i == 2) {
                        //text_id_2.setText("StudentId  :  " + UserData.get(i).getName());
                   //
               }
            } catch (Exception e) {
                Log.d("onResponse", "There is an error");
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<List<Users>>call, Throwable t) {
            Log.d("onResponse", "There is an error");
            t.printStackTrace();
        }
    });

}
接口类

public class Users {
    @SerializedName("deposits")
    @Expose
    private List<Deposit> deposits = new ArrayList<Deposit>();

    /**
     *
     * @return
     * The deposits
     *
     */
    public List<Deposit> getDeposits() {
        return deposits;
    }

    /**
     *
     * @param deposits
     * The deposits
     */
    public void setDeposits(List<Deposit> deposits) {
        this.deposits = deposits;
    }

}
public class Deposit {

    @SerializedName("id")
    @Expose
    private Integer id;
    @SerializedName("amount")

    @Expose
    private Integer amount;
    @SerializedName("status")
    @Expose
    private String status;
    @SerializedName("reason")
    @Expose
    private Object reason;

    /**
     *
     * @return
     * The id
     */
    public Integer getId() {
        return id;
    }

    /**
     *
     * @param id
     * The id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     *
     * @return
     * The amount
     */
    public Integer getAmount() {
        return amount;
    }

    /**
     *
     * @param amount
     * The amount
     */
    public void setAmount(Integer amount) {
        this.amount = amount;
    }

    /**
     *
     * @return
     * The status
     */
    public String getStatus() {
        return status;
    }

    /**
     *
     * @param status
     * The status
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     *
     * @return
     * The reason
     */
    public Object getReason() {
        return reason;
    }

    /**
     *
     * @param reason
     * The reason
     */
    public void setReason(Object reason) {
        this.reason = reason;
    }

}
public interface LoginApi {

    //@GET("/media/webservice/JsonReturn.php HTTP/1.1")
    // Call<List<User>> getUserDetails();


    @GET("api/deposits")
    Call <List<Users>> getDeposits();
}
公共接口LoginApi{
//@GET(“/media/webservice/JsonReturn.php HTTP/1.1”)
//调用getUserDetails();
@获取(“api/存款”)
调用getDeposits();
}
编辑。。。。。。 新存款类别

public class Deposit implements Serializable {

@SerializedName("deposits")
@Expose
private List<Deposit> deposits ;   

public List<Deposit> getDeposits() {
    return deposits;
}

public void setDeposits(List<Deposit> deposits) {
    this.deposits = deposits;
}

@SerializedName("id")
@Expose
private Integer id;
@SerializedName("amount")
@Expose
private Integer amount;
@SerializedName("status")
@Expose
private String status;
@SerializedName("reason")
@Expose
private Object reason;

public Integer getId() {
    return id;
}


public void setId(Integer id) {
    this.id = id;
}


public Integer getAmount() {
    return amount;
}


public void setAmount(Integer amount) {
    this.amount = amount;
}


public String getStatus() {
    return status;
}


public void setStatus(String status) {
    this.status = status;
}

public Object getReason() {
    return reason;
}


public void setReason(Object reason) {
    this.reason = reason;
}}
公共类存款实现可序列化{
@序列化名称(“存款”)
@暴露
私人清单存款;
公众存款清单(){
归还存款;
}
公共存款(列出存款){
这个。存款=存款;
}
@序列化名称(“id”)
@暴露
私有整数id;
@序列化名称(“金额”)
@暴露
私人整数金额;
@序列化名称(“状态”)
@暴露
私有字符串状态;
@序列化名称(“原因”)
@暴露
私人客体理性;
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
公共整数getAmount(){
退货金额;
}
公共无效设置金额(整数金额){
这个。金额=金额;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共对象getReason(){
返回原因;
}
公共无效设置原因(对象原因){
这个。原因=原因;
}}

我认为您的api接口类应该是:

@GET("api/deposits")
Call<User> getDeposits();
@GET(“api/存款”)
调用getDeposits();
在你的活动中:

Call<User> call = service.getDeposits();
call.enqueue(new Callback<User>(){
    @Override
    public void onResponse(Call<User>call, retrofit2.Response<User>response) {

            List<Deposit> = response.getDeposits();

           }

    }
Call Call=service.getDeposits();
call.enqueue(新回调(){
@凌驾
公共void onResponse(Callcall,2.Responseresponse){
List=response.getDeposits();
}
}

getDeposits
对于返回
列表
用户
的方法来说是一个奇怪的名称。也许你应该重命名该类以便更清楚地了解你的意图。你的意思是重命名用户类?这就是我的意思,是的。如果有意义,我不知道。对我来说,它看起来像是存款对象,不一定是用户是的。在任何情况下,如果你控制了服务器代码,你可以将对象“展平”成一个列表。不需要JSON的
{“存款”:
部分,只需从
[{“id”:806638,“amount:”…
@criket_007开始,它不起作用。我不知道你改变了什么。不过,看看你的JSON。你有一个
{“存款":
,是吗?这根本不是一个
列表,它是一个具有
列表存款字段的对象;
…这似乎是您的
用户类。因此,
调用
是正确的。如果您看到了其他错误,并且得到了不同的错误,请用一个到您的问题的答案来澄清这些错误。不,这是错误的方式,我指示call用户Class@ChmathKalubovila我觉得这是对的。不,伙计们,这不是我的工作me@ChmathKalubovila为什么它的方式是错误的?您的响应是在对象中,并且您正在以数组的形式传递它interface@user3333848在这种情况下,我从deposit类创建了一个API,因此我听到调用deposit类构造函数……我更改了存款类并删除用户类。在上面检查我的新存款类