0

私は目覚まし時計アプリケーションの最初の実行時に、新しいデバイスの外部ストレージを読み取るためのアクセス許可を確保しようとしています。実行時にパーミッションをチェックするときのアクティビティコンテキストポインタのNULLポインタエラー

コンテキストでnullポインタエラーが発生し続けます。これは、この行にある:

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 

そして、私はこのエラーを取得しています:私は(活動)文脈、のgetParent()、this.context、getApplicationContextとあなただけの下に見ることができるよう

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

てみましたコンテキスト。それらのすべてに同じ結果がありました。

ご協力いただきありがとうございます。

これは、全体のコードです:

public class MainActivity extends AppCompatActivity implements FragmentAddAlarms.onTabChangedListener { 

    public static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 123; 
    Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    } 
    boolean result = checkPermission(); 
    if (result) { 
     //writeCalendarEvent(); 
    } 

} 

@TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
public boolean checkPermission() 
{ 
    int currentAPIVersion = Build.VERSION.SDK_INT; 
    if(currentAPIVersion>=android.os.Build.VERSION_CODES.M) 
    { 
     if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, Manifest.permission.READ_EXTERNAL_STORAGE)) { 
       AlertDialog.Builder alertBuilder = new AlertDialog.Builder(context); 
       alertBuilder.setCancelable(true); 
       alertBuilder.setTitle("Permission necessary"); 
       alertBuilder.setMessage("External storage is necessary to for alarms!!!"); 
       alertBuilder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
        @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 
        public void onClick(DialogInterface dialog, int which) { 
         ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
        } 
       }); 
       AlertDialog alert = alertBuilder.create(); 
       alert.show(); 

      } else { 
       ActivityCompat.requestPermissions((Activity)context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
      } 
      return false; 
     } else { 
      return true; 
     } 
    } else { 
     return true; 
    } 
} 
+0

compatメソッドを使用している場合は、 'currentAPIVersion> = android.os.Build.VERSION_CODES.M'は必要ありません。バージョンチェックが行われます。 – ianhanniballake

+2

'MainActivity.this'は有効で非nullの' Context'です –

答えて

5

あなたの変数contextnullと役に立たないです。内部クラス(AlertDialogonClickメソッドなど)内で参照する必要がある場合はthis(現在のAppCompatActivityを参照)またはMainActivity.thisを使用してください。

関連する問題