运算符'=='不能应用于'java.lang.String','int错误

时间:2019-07-03 05:54:51

标签: java android

我正在我的android应用程序代码中设置dexter库函数。此循环是检查位置服务(如果已启用)以启动地图活动。

if (ContextCompat.checkSelfPermission(depressionHelpline.this, Manifest.permission.ACCESS_FINE_LOCATION == PackageManager.PERMISSION_GRANTED)) {
            startActivity(new Intent(depressionHelpline.this,MapActivity.class));
            finish();
            return;
        }

我希望它可以正常工作,但显示此错误

  

运算符'=='不能应用于'java.lang.String','int'条件'Manifest.permission.ACCESS_FINE_LOCATION == PackageManager.PERMISSION_GRANTED'总是小于'false'...(Ctrl + F1)   检验信息:该检验分析方法控制和数据流,以报告可能始终为真或为假的条件,其值被静态证明为常数的表达式以及可能导致违反无效能力合同的情况。   标记为@Nullable@NotNull的变量,方法参数和返回值被视为可空值(或分别为非空值),并在分析期间用于检查无效能力合约,例如报告可能产生的NullPointerException(NPE)错误。   可以使用@Contract注释定义更复杂的合同,例如:   @Contract("_, null -> null") —如果方法的第二个参数为null,则返回null @Contract("_, null -> null; _, !null -> !null") —如果方法的第二个参数为null,则返回null,否则为非@Contract("true -> fail") —典型的断言False方法,抛出异常如果为true传递给它   可以将检查配置为使用自定义@ Nullable   @NotNull注解(默认情况下,将使用注解.jar中的注解)强文本

2 个答案:

答案 0 :(得分:5)

这只是一个括号问题。 用此行替换您的行。

if (ContextCompat.checkSelfPermission(depressionHelpline.this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

答案 1 :(得分:0)

如果您进入 Manifest.permission.ACCESS_FINE_LOCATION ,则可以看到实际值为字符串:-

public static final String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";

然后 PackageManager.PERMISSION_GRANTED 返回整数值:-

public static final int PERMISSION_GRANTED = 0;

Manifest.permission.ACCESS_FINE_LOCATION 这是一个字符串,而 PackageManager.PERMISSION_GRANTED 是一个整数,那么我们如何比较String和Int。 正确的方法是:-

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
//            Permission is granted. do your work here
        } else {
//            Permission is not granted. Request permission
        }