我对通过改造在 android 中获取 UserId 感到困惑,当我使用
getUserId()
时,我试图将 UserId 变成一个整数。它显示错误
Incompatible types. Found: 'void', required: 'java.lang.Integer'
,如何解决它并使应用程序运行?
我的代码:
Integer id;
LoginRequest loginRequest = new LoginRequest();
id = loginRequest.setUserId(loginRequest.getUserId());
IdGet(loginRequest);
public void IdGet(LoginRequest loginRequest)
{
Call<LoginResponse> loginResponseCall = ApiClient.getService().PersonEyeGet(id);
loginResponseCall.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if(response.isSuccessful()) {
LoginResponse loginResponse = response.body();
}
else
{
String message = "No User Found";
Toast.makeText(Visitor.this, message, Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
String message = "User Data Missing";
Toast.makeText(Visitor.this, message, Toast.LENGTH_LONG).show();
}
});
}
如何解决它并使应用程序运行?
补充信息:
public class LoginRequest {
public int UserId;
private String username;
private String password;
public int getUserId() {
return UserId;
}
public void setUserId(int userId) {
UserId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class ApiClient {
public static Retrofit getRetrofit() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(httpLoggingInterceptor).build();
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://XXX.XX.XXX.X/webapi/")
.client(okHttpClient)
.build();
return retrofit;
}
public static UserService getService() {
UserService userService = getRetrofit().create(UserService.class);
return userService;
}
}
问题看起来像这条线
id = loginRequest.setUserId(loginRequest.getUserId());
在这里你通过
setUserId
方法设置 userId 所以这个方法返回类型肯定是 void 并且你正在尝试使用 id
初始化 int 变量类型 setUserId
其返回类型是 void 所以这是不可能的整数值
要初始化
id
变量,您需要在存储位置获取用户标识。不幸的是,从您的代码中,我没有找到您存储 userId 的位置
正如@jayesh gurudayalani 所指出的,问题似乎是由以下行引起的:
id = loginRequest.setUserId(loginRequest.getUserId());
这条线有很多问题。首先,您正在初始化 LoginRequest
LoginRequest loginRequest = new LoginRequest()
并立即尝试在下一行中获取 userId。最初,userId 具有垃圾值。假设它的值为 x。因此,getUserId()
方法返回 x,setUserId()
方法将 x 设置为 userId。最终,即使在所有这些操作之后,userId 的值仍然是 x。同样,setUserId
方法返回 void。所以在这些操作完成后,该行看起来像这样:id = void
。因为 id
是一个整数,所以你不能给它赋值 void。
我认为你应该这样写:
LoginRequest loginRequest = new LoginRequest();
id = loginRequest.getUserId();
loginRequest.setUserId(id);
IdGet(loginRequest);
但是,更合乎逻辑的方法是不在此处设置 id。
LoginRequest loginRequest = new LoginRequest();
//id = loginRequest.getUserId();
//loginRequest.setUserId(id);
IdGet(loginRequest);
相反,在
onResponse
中设置响应发送的ID:
if(response.isSuccessful()) {
LoginResponse loginResponse = response.body();
// assuming that loginResponse has a method named getUserId
id = loginResponse.getUserId();
loginRequest.setUserId(id);
}