gpt4 book ai didi

java - 尝试在空对象引用上调用 checkPermission 的虚拟方法

转载 作者:行者123 更新时间:2023-12-01 23:20:55 27 4
gpt4 key购买 nike

我正在尝试获取我的设备的 myime,然后将其以字符串变量的形式保存。但我不断收到此错误..

Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference

这是我的主要 Activity :

package com.testflynns82.testPanel;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

Funzioni fn = new Funzioni();
public String imei="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);

final EditText code = (EditText) findViewById(R.id.editText);
final Button check = (Button) findViewById(R.id.button);

check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imei = fn.checkimei;
code.setText(imei);
}
});
}

}

这是我的另一个 java 文件(Funzioni.java):

package com.testflynns82.testPanel;

import android.content.pm.PackageManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

public class Funzioni extends AppCompatActivity {

public String checkimei() {
String IMEINumber = "";
if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
IMEINumber = telephonyMgr.getImei();
} else {
IMEINumber = telephonyMgr.getDeviceId();
}
}
return IMEINumber;
}

}

我发现了很多与我类似的信息和问题,但我仍然没有得出结论,我尝试遵循的任何建议都无法解决。

谁能告诉我问题出在哪里?

最佳答案

您可以在 MainActivity 中完成所有这些操作。所以,这里的Funzioni类是没有用的。

请按照MainActivity中的步骤操作。

if (ContextCompat.checkSelfPermission(MainActivity.this,
        Manifest.permission.READ_PHONE_STATE)
        != PackageManager.PERMISSION_GRANTED) {

 
    if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
            Manifest.permission.READ_PHONE_STATE)) {
       
    } else {
        ActivityCompat.requestPermissions(MainActivity.this,
                new String[]{Manifest.permission.READ_PHONE_STATE,
                MY_PERMISSIONS_REQUEST_READ_PHONE_STATE);

    }
} else {
    //Read IMEI here
}

然后在此处处理权限回调:

@Override
public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_PHONE_STATE: {
         
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // Read IMEI here
            } else {
               
            }
            return;
        }
    }
}

如果您想在其他类(class)上执行此操作,请按照以下步骤操作:

    public class Funzioni { 
public String checkimei(Context context) {
String IMEINumber = "";
if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
IMEINumber = telephonyMgr.getImei();
} else {
IMEINumber = telephonyMgr.getDeviceId();
}
}
return IMEINumber;
}
}

关于java - 尝试在空对象引用上调用 checkPermission 的虚拟方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58328161/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com