Android 改装:onFailure:应为BEGIN_对象,但在路径处为BEGIN_数组$

Android 改装:onFailure:应为BEGIN_对象,但在路径处为BEGIN_数组$,android,json,retrofit,Android,Json,Retrofit,我正在编写一个android应用程序,使用改型和laravel后端api。 我的问题是:我想用api找回用户,这在chrome:inspector中看起来很好,但logcat显示:onFailure:预期的BEGIN\u对象,但在路径$处是BEGIN\u数组。 我的界面: public interface ApiService { @POST("register") @FormUrlEncoded Call<AccessToken> register(@Fi

我正在编写一个android应用程序,使用改型和laravel后端api。 我的问题是:我想用api找回用户,这在chrome:inspector中看起来很好,但logcat显示:onFailure:预期的BEGIN\u对象,但在路径$处是BEGIN\u数组。

我的界面:

public interface ApiService {

    @POST("register")
    @FormUrlEncoded
    Call<AccessToken> register(@Field("name") String name, @Field("email") String email, @Field("password") String password);

    @POST("login")
    @FormUrlEncoded
    Call<AccessToken> login(@Field("username") String username, @Field("password") String password);

    @GET("users")
    Call<UserResponse> users();

}
和我的api调用:

@OnClick(R.id.btn_get_user)
    void getUsers() {
        call = service.users();
        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                Log.w(TAG, "onResponse: " + response);

                if (response.isSuccessful()) {
                    username.setText(response.body().getData().get(0).getName());
                } else {
                    startActivity(new Intent(GameActivity.this, LoginActivity.class));
                    finish();
                    tokenManager.deleteToken();
                }

            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                Log.w(TAG, "onFailure: " + t.getMessage());
            }
        });

    }
@OnClick(R.id.btn\u get\u用户)
void getUsers(){
call=service.users();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.w(标记“onResponse:”+响应);
if(response.issusccessful()){
username.setText(response.body().getData().get(0.getName());
}否则{
startActivity(新意图(GameActivity.this、LoginActivity.class));
完成();
deleteToken();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.w(标记“onFailure:+t.getMessage());
}
});
}
希望你能帮助我。
谢谢大家!

您应该检查从后端api发送的json。您可能正在从后端api为
@GET(“用户”)
api调用发送一个对象,但您希望将其响应解析为
List

使用下面显示的“List”广告:-

**Api interface**
公共接口服务{

@POST("register")
@FormUrlEncoded
Call<List<AccessToken>> register(@Field("name") String name, @Field("email") String email, @Field("password") String password);

@POST("login")
@FormUrlEncoded
Call<List<AccessToken>> login(@Field("username") String username, @Field("password") String password);

@GET("users")
Call<List<UserResponse>> users();
@POST(“寄存器”)
@FormUrlEncoded
调用寄存器(@Field(“name”)字符串名称、@Field(“email”)字符串电子邮件、@Field(“password”)字符串密码);
@发布(“登录”)
@FormUrlEncoded
调用登录名(@Field(“用户名”)字符串用户名,@Field(“密码”)字符串密码);
@获取(“用户”)
调用用户();
}

api调用:

@OnClick(R.id.btn_get_user)
    void getUsers() {
        call = service.users();
        call.enqueue(new Callback<List<UserResponse>>() {
            @Override
            public void onResponse(Call<List<UserResponse>> call, Response<List<UserResponse>> response) {
                Log.w(TAG, "onResponse: " + response);

                if (response.isSuccessful()) {
                    username.setText(response.body().getData().get(0).getName());
                } else {
                    startActivity(new Intent(GameActivity.this, LoginActivity.class));
                    finish();
                    tokenManager.deleteToken();
                }

            }

            @Override
            public void onFailure(Call<List<UserResponse>> call, Throwable t) {
                Log.w(TAG, "onFailure: " + t.getMessage());
            }
        });

    }
@OnClick(R.id.btn\u get\u用户)
void getUsers(){
call=service.users();
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.w(标记“onResponse:”+响应);
if(response.issusccessful()){
username.setText(response.body().getData().get(0.getName());
}否则{
startActivity(新意图(GameActivity.this、LoginActivity.class));
完成();
deleteToken();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
Log.w(标记“onFailure:+t.getMessage());
}
});
}

json解析无效。您正在尝试将数组作为对象进行分析。但要知道,当我想要访问数据时,它会给我一个空指针异常:(如果您得到的是响应而不是响应.body(),您可以通过打印response.code()来检查错误代码,或者现在您可以通过response.body().get(0).getName()来获取数据。我尝试了这个响应。body().get(0).getName(),但它说getName()无法解析响应。code()返回了200好的,我得到了我的初始错误…在我的laravel api中,我返回了response()->json($users),而不是response()->json(['data'=>$users])
@POST("register")
@FormUrlEncoded
Call<List<AccessToken>> register(@Field("name") String name, @Field("email") String email, @Field("password") String password);

@POST("login")
@FormUrlEncoded
Call<List<AccessToken>> login(@Field("username") String username, @Field("password") String password);

@GET("users")
Call<List<UserResponse>> users();
@OnClick(R.id.btn_get_user)
    void getUsers() {
        call = service.users();
        call.enqueue(new Callback<List<UserResponse>>() {
            @Override
            public void onResponse(Call<List<UserResponse>> call, Response<List<UserResponse>> response) {
                Log.w(TAG, "onResponse: " + response);

                if (response.isSuccessful()) {
                    username.setText(response.body().getData().get(0).getName());
                } else {
                    startActivity(new Intent(GameActivity.this, LoginActivity.class));
                    finish();
                    tokenManager.deleteToken();
                }

            }

            @Override
            public void onFailure(Call<List<UserResponse>> call, Throwable t) {
                Log.w(TAG, "onFailure: " + t.getMessage());
            }
        });

    }