当前位置: 首页 > 知识库问答 >
问题:

使用Android Retrofit2的方法登录总是返回false

史洛城
2023-03-14

我在Android Studio上写过Java代码。我做了登录方法,在我的代码中发生了一些事情。它没有返回正确的返回值。返回值始终为false。虽然我在Android Studio上检查了logd函数,但是布尔变量已经正确地改变了,但是它在方法的末尾又改变了,所以登录方法总是返回false&我无法继续登录。

请帮我解决这个困惑的时刻。任何回答都将不胜感激,非常感谢。

public class AppLogin {

    UniversalResponse uniresp = new UniversalResponse();
    private Boolean hasil = true ;

    public Boolean getHasil() {
        return hasil;
    }

    public void setHasil(Boolean hasil) {
        this.hasil = hasil;
    }
    
    public Boolean authorize(String user, String passwd){
        APIInterface apiInterface;
        LoginModel logindata = new LoginModel();
        logindata.setUsername(user);
        logindata.setPassword(passwd);

        apiInterface = APIClient.getClient().create(APIInterface.class);

        //Call<UniversalResponse> call = apiInterface.doLogin(logindata.getUsername(), logindata.getPassword());
        Call<UniversalResponse> call = apiInterface.doLogin(user, passwd);
        call.enqueue(new Callback<UniversalResponse>() {
            @Override
            public void onResponse(Call<UniversalResponse> call, Response<UniversalResponse> response)
            {
                UniversalResponse uniresp = response.body();
                Log.d("Login Module - Value dr Hasil sebelum Reponse Successfull" , getHasil().toString());
                if(response.isSuccessful() ) {
                    Log.d("Nama Service", uniresp.getService());
                    Log.d("Isi Message", uniresp.getMessage());
                    Log.d("Login Module - Value dr Hasil di DALAM Reponse Successfull" , getHasil().toString());
                    if ( uniresp.getMessage().equals("Success") && uniresp.getService().equals("MobileAppLogin") )
                    {
                        setHasil(true);
                        Log.d("Login Module - Value dr Hasil di DALAM Reponse Successfull dlm If Getmessasge Equals" , getHasil().toString());
                    }
                    else {  setHasil(false);
                    Log.d("Login Module - Value dr Hasil di DALAM Reponse Successfull dlm If Getmessasge Equals Equals ELSE Section" , getHasil().toString());   }

                }
                Log.d("Login Module - Value dr Hasil di LUAR Reponse Successfull" , getHasil().toString());

            }

            @Override
            public void onFailure(Call<UniversalResponse> call, Throwable t) {
                call.cancel();
                hasil= false;
            }
        });

        Log.i("Login Module - Value dr Hasil di DEKAT RETURN PALING BAWAH" , getHasil().toString());

       return getHasil();

    }


}

共有1个答案

锺离辰沛
2023-03-14

不幸的是,您编写代码的方式并不总是有效的。这是异步任务作为同步任务运行的典型情况。

onfailureonresponse中,hasil的值被更改,在从方法authorize返回之前,可能没有机会完成。

您需要更改将hasil的值传播到调用代码的方式,以便能够使其工作。有几种方法可以做到这一点,其中一种简单的方法是进行回调,而无需对代码进行太多更改:

interface Callback {
  void onResponse(boolean hasil);

  void onError(Throwable t);
}
public void authorize(String user, String passwd, Callback callback){
   // ...
   call.enqueue(new Callback<UniversalResponse>() {
        @Override
        public void onResponse(Call<UniversalResponse> call, Response<UniversalResponse> response)
        {
           if(response.isSuccessful() ) {
                if ( uniresp.getMessage().equals("Success") && uniresp.getService().equals("MobileAppLogin") )
                {
                    callback.onResponse(true);
                }
                else {  callback.onResponse(false);  }
            }
        }

        @Override
        public void onFailure(Call<UniversalResponse> call, Throwable t) {
           callback.onError(t);
        }
    });
}
 类似资料:
  • 当我尝试登录系统时,我得到的信息表明我输入了不正确的数据。该方法返回false,并显示以下消息: 身份验证失败,因为App\Security\LoginFormAuthentiator::churkCre的als()没有返回true。 我根据symfony文档进行日志记录https://symfony.com/doc/current/security/form_login_setup 实体用户 证

  • 我正在尝试使用equals方法与对象进行比较,但它总是返回false

  • 以下是 IdP 在 OpenAm 的元数据文件 SP位于:http://mysp.com/ 可以发布SAML响应的SP的验证url位于:http://mysp.com/login 以下请求适用于 SSO 登录:http://myidp.com/openam/idpssoinit?metaAlias=/idp 当我发布 SAML 请求以 http://myidp.com/openam/SSOPOST

  • 我是Spring的新手,我一直在尝试使用Spring Security性实现一个简单的登录页面。但在提供登录凭据后,它总是转到拒绝访问的url。loadUserByUsername()方法总是在我提供正确的用户名和密码后返回一个用户。但我不知道如何找到用户对象返回后会发生什么。 用户只有一个角色。该方法返回具有超级用户角色的用户。 这是我的Spring Security配置类 这是我的UserDe

  • 在.NET Framework 4.5中,由Trim()方法调用的专用TrimHelper()方法使用以下条件来确定是否需要修剪字符:(由.NET Reflector反编译的代码) 我想知道为什么IsBOMWhitesspace方法总是返回false?? 这是微软计划在未来改变/扩展的吗?例如,通过检查char是否为‘u efff’并在这种情况下返回true?

  • 我有一个返回对象的方法。我想使用spring AOP在日志中打印该对象的值。我怎样才能做到呢?