我正在使用改造和laravel后端api编写一个android应用程序。 我的问题是:我想用api找回用户,因为它在chrome:inspector中看起来不错,但是logcat显示: onFailure:预期为BEGIN_OBJECT,但在路径$ 上为BEGIN_ARRAY >
我的界面:
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();
}
我的回答班
import java.util.List;
public class UserResponse {
List<User> data;
public List<User> getData() {
return data;
}
我的用户模型
public class User {
int id;
String name;
String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
我的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());
}
});
}
希望您能帮助我。 谢谢!
答案 0 :(得分:1)
使用下面显示的“列表”广告:-
**Api interface**
公共接口ApiService {
@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();
}
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());
}
});
}
答案 1 :(得分:0)
您应该检查从后端api发送的json。可能您是从后端api发送一个对象,以进行@GET("users")
api调用,但您想将其响应解析为List<User>