web-dev-qa-db-fra.com

L'appel de méthode peut produire une exception Java NullpointerException

J'ai un code:

public String getNameUpdateEvent(long id) {
    Cursor mCursor =
            db.rawQuery("select name from events WHERE _id=" + id + ";", null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    String updateNameEvent;
    updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    return updateNameEvent;
}    

et je reçois un avertissement 

    Warning:(173, 45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'Java.lang.NullPointerException'

Comment je peux le réparer pls?

14
Raddino

Votre curseur ne peut pas être null, il aura toujours une valeur quelconque. Mais le curseur peut être vide, vous devez donc tout d’abord aller à la première ligne du curseur avec la méthode moveToFirst(), et s’il renvoie true - cela signifie que le curseur a au moins une ligne. Vous pouvez donc utiliser tout ce que vous voulez, le cas échéant. false - cela signifie qu'il n'y a rien pour votre requête, vous n'avez donc pas de lignes pour obtenir des données. Votre code devrait ressembler à ceci:

public String getNameUpdateEvent(long id) {
    Cursor mCursor =
        db.rawQuery("select name from events WHERE _id=" + id + ";", null);

    String updateNameEvent = null;
    if (mCursor != null && mCursor.moveToFirst()) {
        updateNameEvent = mCursor.getString(mCursor.getColumnIndex("name"));
    }
    return updateNameEvent;
}  
21
Orest Savchak

Solution 1: Puisque vous codez en dur, pourquoi ne pas coder en dur l'index

 updateNameEvent = mCursor.getString(0);

Solution 2:

try{
    updateNameEvent = mCursor.getString(mCursor.getColumnIndexOrThrow("name"));
}catch(IllegalArgumentException ie){
    updateNameEvent = 0; 
}

la méthode getColumnIndexOrThrow lève une exception IllegalArgumentException si la colonne n'existe pas. 

La solution 1 est plus simple et plus rapide.

0
kamoor