Autore Topic: Errore NullPointerException  (Letto 680 volte)

Offline Zecca

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Ubuntu 12.04, Windows 8
Errore NullPointerException
« il: 03 Ottobre 2014, 21:05:12 CEST »
0
Ciao ragazzi sto cercando di far funzionare questa tabella da 2 giorni ma per inesperienza (spero) non sono in grado da solo a trovare la soluzione a questo errore.
Da quanto ho capito (non fateci troppo affidamento) la selectQuery restituisce null ma non riesco a spiegami il motivo.
Faccio affidamento su occhi più buoni dei miei grazie a tutti

Codice (Java): [Seleziona]
private void showList() {
        ArrayList<Pizza> pizzaList = new ArrayList<Pizza>();
        pizzaList.clear();

        String query = "SELECT * FROM " + PizzaTable.tableName;
        Cursor cursor = sqlHandler.selectQuery(query);

        if(cursor != null && cursor.getCount() != 0) {
            if(cursor.moveToFirst()) {
                do {
                    Pizza pizza = new Pizza();

                    pizza.setId(cursor.getInt(cursor.getColumnIndex(PizzaTable._ID)));
                    pizza.setNamePizza(cursor.getString(cursor.getColumnIndex(PizzaTable.namePizza)));
                    pizza.setPrice(cursor.getString(cursor.getColumnIndex(PizzaTable.price)));
                    pizzaList.add(pizza);
                }while(cursor.moveToNext());
            }
        }
        cursor.close();  //riga 45 che da errore ma in teoria il problema dovrebbe essere sul cursor prima degli if

        PizzaListAdapter pizzaListAdapter = new PizzaListAdapter(ListinoActivity.this,pizzaList);
        list.setAdapter(pizzaListAdapter);

    }

Off-Topic:
10-03 17:12:22.625    1924-1924/com.zekka.pizzeria E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.zekka.pizzeria/com.zekka.pizzeria.ListinoActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.zekka.pizzeria.ListinoActivity.showList(ListinoActivity.java:45)
            at com.zekka.pizzeria.ListinoActivity.onCreate(ListinoActivity.java:23)
            at android.app.Activity.performCreate(Activity.java:5104)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5041)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
            at dalvik.system.NativeStart.main(Native Method)

vi posto anche le funzioni richiamate

Codice (Java): [Seleziona]
public Cursor selectQuery(String query) {
        Cursor cursor = null;
        try {
            if(sqLiteDatabase.isOpen())
                sqLiteDatabase.close();

            sqLiteDatabase = dbHelper.getWritableDatabase();
            cursor = sqLiteDatabase.rawQuery(query,null);
        }
        catch(Exception e) {
            System.out.println("DATABASE ERROR" + e);
        }
        return cursor;
    }

e la classe dbHelper

Codice (Java): [Seleziona]
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;


public class DatabaseHelper extends SQLiteOpenHelper {

    public static final String tablePizza = PizzaTable.tableName;
    public static final String idPizza = PizzaTable._ID;
    public static final String namePizza = PizzaTable.namePizza;
    public static final String pricePizza = PizzaTable.price;
    private static final String createTablePizza = "CREATE TABLE "
            + tablePizza + "("
            + idPizza + " INTEGER PRIMARY KEY AUTOINCREMENT, "
            + namePizza + " TEXT NOT NULL, " + pricePizza + " TEXT NOT NULL);";
    private static final String insertTablePizza = "INSERT INTO "
            + tablePizza + "(" + namePizza + "," + pricePizza + ") VALUES "
            + "('Margherita','5,00€'),('Viennese',6,00€);";
    private static final String dropTablePizza = "DROP TABLE IF EXISTS "
            + tablePizza + ";";


    Context context;

    public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory cursorFactory, int versionDB) {
        super(context,databaseName,cursorFactory,versionDB);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(dropTablePizza);
        db.execSQL(createTablePizza);
        db.execSQL(insertTablePizza);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS " + tablePizza);
        onCreate(db);
    }
}

Offline Zecca

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Ubuntu 12.04, Windows 8
Re:Errore NullPointerException
« Risposta #1 il: 04 Ottobre 2014, 00:53:08 CEST »
0
L'origine del problema é che non trova la tabella nel database

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Errore NullPointerException
« Risposta #2 il: 04 Ottobre 2014, 12:41:37 CEST »
0
Se l'errore fosse nell'esecuzione della query, nel log dovrebbe uscirti DATABASE ERROR (come da tuo exception handling).

L'eccezione d'altra parte è molto probabilmente dovuta al Cursor che è NULL. Infatti una volta che hai sistemato tutto, chiudilo solo se non null.

Domanda collaterale: perchè usi la rawQuery e non il modo strutturato?
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Zecca

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Ubuntu 12.04, Windows 8
Re:Errore NullPointerException
« Risposta #3 il: 04 Ottobre 2014, 13:02:08 CEST »
0
Se l'errore fosse nell'esecuzione della query, nel log dovrebbe uscirti DATABASE ERROR (come da tuo exception handling).

Domanda collaterale: perchè usi la rawQuery e non il modo strutturato?

si lavorandoci ancora un pò  ho notato che gli errori nel database me li segnala.
cosa intendi per metodo strutturato?
scusa l'ignoranza ma come insegnante uso il web e sto cercando di applicare quello che leggo in giro al mio problema per capirne anche il funzionamento.

Citazione
L'eccezione d'altra parte è molto probabilmente dovuta al Cursor che è NULL. Infatti una volta che hai sistemato tutto, chiudilo solo se non null.

intendi nella funzione showList() di mettere un
Codice (Java): [Seleziona]
if(cursor != null)
            cursor.close();

facendo il debug ho notato che nella funzione selectQuery il cursore rimane a null potrebbe essere dato dalla rawQuery?

Post unito: 04 Ottobre 2014, 14:39:47 CEST
Trovato l'errore vorrei auto-bastonarmi!!!
Praticamente c'era prima un errore in quanto la query di select non era terminata --> mancava il ; finale per sql.

E nel setContentView dell'activity con showList() avevo modificato (non so per quale strano motivo) il file di layout.

grazie del supporto ;)
« Ultima modifica: 04 Ottobre 2014, 14:39:47 CEST da Zecca, Reason: Merged DoublePost »