15

I have a 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;
}    

and I´m getting a warning

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

How i can fix it pls?

General Grievance
  • 4,555
  • 31
  • 31
  • 45
Raddino
  • 185
  • 1
  • 2
  • 12
  • why not just mCursor.getString(1); – kamoor Dec 23 '14 at 23:13
  • 1
    Here's a thought, what would happen if `mCursor` is null and you make the call `mCursor.getColumnIndex("name")`? – Anil Dec 23 '14 at 23:17
  • I have provided an anwer about this here: https://stackoverflow.com/questions/46519388/method-invocation-may-produce-nullpointerexception-retrofit-body/46519442 – Blasanka Dec 25 '19 at 04:01

2 Answers2

23

Your cursor can not be null, it will always have any value. But cursor can be empty, so you should firstly go to first row in cursor with method moveToFirst(), and if it returns true - it means, that cursor has at least one row, so you can do with it all you want, if it returns false - it means, that there is nothing for your query, so you have not any rows to get data from. Your code should look like this:

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;
}  
Shashanth
  • 4,995
  • 7
  • 41
  • 51
Orest Savchak
  • 4,529
  • 1
  • 18
  • 27
  • Won't this still produce the same warning: `Warning:(173, 45) Method invocation 'mCursor.getColumnIndex("name")' may produce 'java.lang.NullPointerException'` – Jonny Henly Dec 23 '14 at 23:18
  • I have edited my answer. I'm not sure if rawQuery can return null value. I thought that can't, so warning is IDE bug. But if can - then my. In any case it should have checking if cursor have values I think. – Orest Savchak Dec 23 '14 at 23:24
  • ok, now the Orest edited solution is working, just i needeed to initialize String updateNameEvent = null; . Thanks! – Raddino Dec 23 '14 at 23:51
0

Solution 1: Since you are hard coding SQL, why not hard code the index

 updateNameEvent = mCursor.getString(0);

Solution 2:

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

getColumnIndexOrThrow method will throw IllegalArgumentException if column don't exists.

Solution 1 is faster and simple.

kamoor
  • 2,909
  • 2
  • 19
  • 34