这是我的代码:
界面:
public interface LoginAPI {
@GET("LoginCheck/{username}/{password}/{status}")
Call<List<Login>> LoginCheck(@Path("username") String username, @Path("password") String password, @Path("status") String status);
}
班级:
public class Login {
String username;
String password;
String status;
}
主要活动:
private void LoginCheck() {
String baseUrl = "http:192.168.169.3:8889/WebService_Indekost/";
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
LoginAPI api = retrofit.create(LoginAPI.class);
Call<List<Login>> result = api.LoginCheck("username", "password", "status");
result.enqueue(new Callback<List<Login>>() {
@Override
public void onResponse(Call<List<Login>> call, Response<List<Login>> response) {
Log.d("test",response.message());
}
@Override
public void onFailure(Call<List<Login>> call, Throwable t) {
Log.d("Fail", "Fail");
}
});
}
当我尝试运行它时,它显示失败而不是消息。请注意,响应应采用json格式。我在这做错了什么?
答案 0 :(得分:0)
当你评论你的错误它说预期的BEGIN_ARRAY但是BEGIN_OBJECT 意味着你试图把它当作一个以括号开头的数组来对待
[ .. data
]
但是你没有得到一个JSON数组,你得到一个对象。因此,请尝试将API调用Call<List<Login>>
更改为Call<Login>
。这可能有用。
答案 1 :(得分:0)
因为你使用List<Login>
来解析响应,所以响应应该是一个JSON数组,如下所示:
[
{"username":"...","password":"...", "status":"..."},
{"username":"...","password":"...", "status":"..."},
{"username":"...","password":"...", "status":"..."}
]
如果服务器返回结果如下:
{"username":"...","password":"...", "status":"..."}
然后你应该使用Call<Login>
替换Call<List<Login>>
来解析响应,或者,让服务器更改其响应格式以对应客户端,这取决于你真正想要的。