Null pointer exception durante il controllo per l’autorizzazione con android.contenuto.Contesto.checkPermission

Ho bisogno di verificare le autorizzazioni prima di interrogare Android calendario per gli eventi.
Per farlo, Android studio è di avviso che ho bisogno di seguire un controllo prima di interrogazione.
L’auto codice generato è questo pezzo:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
        System.out.println("NO ACCESS TO CALENDAR!! Abort mission, abort mission!!");
    }

Quando si tenta di eseguire il programma, ottengo questo errore:

Tentativo di richiamare il metodo virtuale ‘int
android.contenuto.Contesto.checkPermission(java.lang.String, int, int)’
su un oggetto null riferimento

Quindi è chiaro che qualcosa è null a questo punto, e ho cercato di ottenere il contesto dell’app con un modo diverso, ma è ancora lo stesso errore.
Altra cosa che ho provato è stato questo codice, che dovrebbe gestire il target inferiore Android 6:

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

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }

Ancora ottenere lo stesso errore, qualcuno può aiutarmi con questo?

  • da dove chiama questo? dove questo oggetto si riferiscono a
  • e ‘ una classe separata, controller: public class DummyData extends Activity { …. }
  • bene, si dovrebbe utilizzare questo da AppCompatActivity classe non forma l’Attività
  • provato, sempre lo stesso errore
InformationsquelleAutor Async- | 2016-03-07

 

3 Replies
  1. 15

    è una classe separata, controller: public class DummyData extends Activity { …. }

    Che non è andare a lavorare.

    Mai estendere Activity a meno che non è una vera e propria attività, uno che si registra nel manifesto.

    Mai creare un’istanza di un Activity via di un costruttore (ad esempio, il new DummyData() che hai da qualche parte nel codice). Utilizzare startActivity() per visualizzare un’attività che si sono registrati nel manifesto.

    Così com’è, mentre il DummyData classe possono lavorare da una compilation di vista, non funziona in fase di runtime. Un Activity deve essere istanziati dal quadro, e che non è il caso con il vostro DummyData.

    Passare un reale Context oggetto checkSelfPermission(), e passare un reale Activity oggetto requestPermissions(). In questo caso, “reale” significa “consegnato dal quadro”.

    • infatti, si rivela essere una domanda stupida, ma la tua risposta mi ha aiutato fuori. Ho rimosso l’Attività si estende, e superato il contesto e l’attività per un costruttore. Grazie!
    • Come detto Passare un Contesto reale oggetto checkSelfPermission () e passare un vero e proprio oggetto di Attività di requestPermissions(). Si passa getContext() nel Frammento funzionerà? O devo usare getActivity()?
    • Uno di questi dovrebbe funzionare per le finalità di checkSelfPermission().
  2. 1

    Uso (Attività)mContext invece di questo.

    if(ContextCompat.checkSelfPermission((Activity)mContext,Manifest.permission.READ_CALENDAR)!=PackageManager.PERMISSION_GRANTED)    
            {
                ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.READ_CALENDAR},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);
            }
    • Per il requestPermissions metodo, in realtà funziona anche se si passa l’attività. (anche se si potrebbe anche inviare il contesto sia per la consistenza)
  3. 0

    Devi scrivere la giusta attività in posizione “questo”
    problema principale di attività.

    Provare a scrivere il codice in obbiettivo principale l’allevamento e test.

       if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) {
    
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CALENDAR},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);
    }

Lascia un commento