基本上,我试图从内部类中修改一个静态变量,然后我想读取该静态变量,但它的设置不正确(从我所读取的内容来看,问题可能是程序正在多个线程中运行,并且正在读取静态值的线程可能无法获取更新,而仅读取缓存?)我尝试将静态变量设置为volatile,但没有任何效果。

MainActivity->

ApiManager.evaluateResponse(responseLoginCall, MainActivity.this);

    if(ApiManager.isExecutionSuccessful) {
        Toast.makeText(this, "We are in", Toast.LENGTH_SHORT).show();
    }


ApiManager->

public class ApiManager  {

public static volatile boolean isExecutionSuccessful = false;

public static void evaluateResponse(Call<AuthResponse> responseCall, Activity activity) {
    responseCall.enqueue(new Callback<AuthResponse>() {
        @Override
        public void onResponse(@NotNull Call<AuthResponse> call, @NotNull Response<AuthResponse> response) {
            if(response.isSuccessful()) {
                ApiManager.isExecutionSuccessful = true;
            } ...
    });


在此示例中,即使通过ApiManager.isExecutionSuccessful = true;,isExecutionSucessful也为false

最佳答案

ResponseCall.enqueue()异步发送请求并通知回调其响应,因此在请求完成ApiManager.evaluateResponse(responseLoginCall, MainActivity.this)之前调用responseCall.enqueue()

我建议使用responseCall.execute()函数进行同步调用。

10-07 18:55