如何在 android java 中通过改造获取用户 ID

问题描述 投票:0回答:2

我对通过改造在 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;
    }
}
android retrofit
2个回答
0
投票

问题看起来像这条线

id = loginRequest.setUserId(loginRequest.getUserId());

在这里你通过

setUserId
方法设置 userId 所以这个方法返回类型肯定是 void 并且你正在尝试使用
id
初始化 int 变量类型
setUserId
其返回类型是 void 所以这是不可能的整数值

要初始化

id
变量,您需要在存储位置获取用户标识。不幸的是,从您的代码中,我没有找到您存储 userId

的位置

0
投票

正如@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);
}
© www.soinside.com 2019 - 2024. All rights reserved.