改造不会返回响应消息(android)

时间:2016-04-10 04:23:44

标签: java android retrofit

这是我的代码:

界面:

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格式。我在这做错了什么?

2 个答案:

答案 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>>来解析响应,或者,让服务器更改其响应格式以对应客户端,这取决于你真正想要的。