Попытка вызвать виртуальный метод для checkPermission для нулевой ссылки на объект - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь получить myime моего устройства, а затем получить его в виде строковой переменной. но я продолжаю получать эту ошибку ..

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

это моя основная деятельность:

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;
    }

}

Я нашел много информации и вопросов, похожих на мои, но мне так и не удалось прийти к какому-либо заключению, ни один совет, которому я стараюсь следовать, не могу решить.

Может кто-нибудь сказать мне, чтопроблема может быть?

1 Ответ

0 голосов
/ 10 октября 2019

Вы можете сделать все это в вашем 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;
        }
    }
}

Если вы хотите это сделатьна другой класс, следуйте этому:

    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;
     } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...