如何在方法void中初始化最终变量布尔数组

时间:2018-11-15 04:20:14

标签: android android-studio boolean

我的应用程序将检查是否启用了播放保护设置。

public static boolean checkGooglePlayProtectSettings(Context context){
    final boolean[] enabled = new boolean[]{false};
    try{
        SafetyNet.getClient(context).isVerifyAppsEnabled().addOnCompleteListener(new OnCompleteListener<SafetyNetApi.VerifyAppsUserResponse>() {

            @Override
                    public void onComplete(@NonNull Task<SafetyNetApi.VerifyAppsUserResponse> task) {
                        if(task.isSuccessful()){
                            SafetyNetApi.VerifyAppsUserResponse result = task.getResult();
                            if(result != null){
                                if(result.isVerifyAppsEnabled()){
                                    enabled[0] = true;
                                }else{
                                    enabled[0] = false;

                                }
                            }
                        }else{
                            Log.e("GoogleProtectPermission", "A general error occurred.");
                        }
                    }
                });
    }catch (Exception e){
        e.printStackTrace();
    }

    if (enabled[0]){
        Log.d("GoogleProtectPermission", "Is enabled");
    }else {
        Log.d("GoogleProtectPermission", "Is disabled");
    }
    return false;
}

在这种情况下,我尝试将最终结果记录下来,但是在记录结果中始终不处于活动状态,如何获得良好的结果以检查play prtoect是否处于活动状态?

2 个答案:

答案 0 :(得分:0)

isVerifyAppsEnabled()方法是异步的,它调用OnCompleteListener的{​​{1}}方法来通知结果准备就绪。

很有可能在触发onComplete之前执行了此块,因此此时OnCompleteListener的值保持不变。

enabled[0]

由于没有同步方法来获取结果,因此您可能不得不以某种方式更改方法,以考虑到这种异步性,并在回调结果就绪或(高度不推荐 )执行屏蔽等待,直到if (enabled[0]) { Log.d("GoogleProtectPermission", "Is enabled"); } else { Log.d("GoogleProtectPermission", "Is disabled"); } 返回的Task完成。

此外,不管这个问题,在您当前的代码中,使用布尔数组而不是仅仅使用布尔数组似乎都没有意义

isVerifyAppsEnabled

可以简化为if(result.isVerifyAppsEnabled()) { enabled[0] = true; } else { enabled[0] = false; }

答案 1 :(得分:-1)

您可以这样:

final StringBuilder sb = new StringBuilder();
...
if(result.isVerifyAppsEnabled()){
    sb.append("good");
}else{
    sb.append("bad");
}
...
if(sb.toString().equals("good")){
    Log.d("GoogleProtectPermission", "Is enabled");
}
if(sb.toString().equals("bad")){
    Log.d("GoogleProtectPermission", "Is disabled");
}

已编辑:    是的,正如评论所指出的,我的答案是错误的。所以有两种方法:

1直接输出日志信息

   if(result.isVerifyAppsEnabled()){
       Log.d("GoogleProtectPermission", "Is enabled");
    }else{
        Log.d("GoogleProtectPermission", "Is disabled");
    }

2使用接口回调

   public interface Callback {  //add an interface 
        void onResponse(String message);
    }

    final StringBuilder sb = new StringBuilder();
    ...
    if(result.isVerifyAppsEnabled()){
        sb.append("good");
    }else{
        sb.append("bad");
    }
    callback.onResponse(sb.toString()); //add this line

并在某个位置订阅该界面。