Visualizzazione stampabile
-
Quote:
Originariamente inviato da
lorenzogiudici5
public String queueAll(){
String[] columns = new String[]{KEY_CONTENT};
Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,
null, null, null, null, null);
String result = "";
int index_CONTENT = cursor.getColumnIndex(KEY_CONTENT);
for(cursor.moveToFirst(); !(cursor.isAfterLast()); cursor.moveToNext()){
result = result + cursor.getString(index_CONTENT) + "\n";
}
return result;
}
Il metodo .queueAll() l'ho preso dal tuo esempio. Praticamente fa una query della tabella contatti e aggiunge tutto quello che c'è nella colonna KEYCONTENT in una stringa
Mmm.. ok. Allora, come prima, eseguiamo un fix and code riga per riga, eseguendo di volta in volta, per capire qual'è l'errore :)
Però occhio perchè l'errore potrebbe non risiedere nel metodo queueALL() in sè per sè, ma dall'utilizzo che se ne fa nella classe main o la classe che lo usa
-
Ho provato a inserire come prima Log.e per vedere dove si bloccasse. Appena richiamo il metodo
codice:
Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, null, null, null, null, null, null);
si blocca con il solito errore:
04-23 09:58:24.249: E/AndroidRuntime(625): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.databasefrank17.prova/it.databasefrank17.prova.Database_frank17_provaAct ivity}: java.lang.NullPointerException
-
Quote:
Originariamente inviato da
lorenzogiudici5
Ho provato a inserire come prima Log.e per vedere dove si bloccasse. Appena richiamo il metodo
codice:
Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, null, null, null, null, null, null);
si blocca con il solito errore:
04-23 09:58:24.249: E/AndroidRuntime(625): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.databasefrank17.prova/it.databasefrank17.prova.Database_frank17_provaAct ivity}: java.lang.NullPointerException
Hum, ti dice Unable to start Activity... gentilmente, potresti inviarmi l'export del progetto in eclipse, così cerco di analizzarlo nel suo complesso e ti indico dove è l'errore? Grazie, Ciao
-
1 allegato(i)
Certo! eccolo, e grazie mille ;)
Allegato 9448
-
Allora, ho trovato diversi errori :)
1) il database denominato 'rubricasql.sql' è un file da 0kb. E' necessario utilizzare database di tipo sqlite e che contengano la tabella android_metadata e il campo denominato 'locale'. Per la creazione di un db preesistente ti consiglio il tool SQLite Administrator - International Milestone Beta
Per sopperire alla mancanza del db, ne ho creato uno io con quel tool, contente la tabella 'rubrica' con un unico campo, 'nome' e l'ho sostituito nell'assets rispetto al tuo db.
2) Nel metodo copyDatabase (della classe SQLiteAdapter.java), la riga per la copia in output del file, OutputStream dbOut = new FileOutputStream(DB_PATH + "rubricasql.sql");, mancava del DB_PATH (in pratica indicavi un path soltanto utilizzando il nome file.
Il nomefile, memorizzato in una final String sempre in questa classe era inoltre diverso rispetto al nomefile reale contenuto nell'assets:
il nome file si chiamata rubricasql.sql, tu indicavi 'rubrica.sql'.
3) La Function CheckDatabase() (che controlla l'esistenza del db fisico sul device) era già utilizzata prima della copia all'interno della Function copyDatabase(). Tu la richiamavi due volte, nell'Oncreate() della classe SQLiteAdapter().
Inoltre, per come è concepito questo Adapter e data la presenza della Function copyDatabase() è conveniente utilizzare la funzione nei metodi openToRead() o openToWrite(), in modo che il file venga copiato quando lo decidi tu.
4) nella function copyDatabase() indicavi ulteriormente il nome file sbagliato, ovvero rubrica.sql, quando il file fisico si chiama rubricasql.sql:
InputStream assetsDB = context.getAssets().open("rubricasql.sql");
5) Ho aggiunto qualche Throws Exception qui e là ;)
Il progetto che mi hai inviato, corretto, lo puoi scaricare qui
Spero sia tutto chiaro! :)
Ciao
-
Non so come ringraziarti. Rileggendo velocemente il mio codice e il tuo corretto mi sono accorto davvero di quanti errori avevo commesso!
Grazie mille davvero per l'aiuto e il supporto, quando ho tempo lo analizzo riga per riga e nel caso avessi ancora qualche dubbio spero di poter contare anche su di te :)
Sei un grande! Thanks! ;)
-
Quote:
Originariamente inviato da
lorenzogiudici5
Non so come ringraziarti. Rileggendo velocemente il mio codice e il tuo corretto mi sono accorto davvero di quanti errori avevo commesso!
Grazie mille davvero per l'aiuto e il supporto, quando ho tempo lo analizzo riga per riga e nel caso avessi ancora qualche dubbio spero di poter contare anche su di te :)
Sei un grande! Thanks! ;)
E' un piacere!
Ciao
-
Sono ancora qui :)
Del codice che mi hai passato credo di aver capito tutto, ora mi sono chiari gli errori e soprattuto il perchè sbagliavo. Sono invece ancora un po' in confusione con la creazione del database. Ho scaricato il programma che mi hai suggerito, ma non riesco proprio a tirar fuori un file sql..
riesci a darmi qualche dritta per il suo funzionamento?
-
Quote:
Originariamente inviato da
lorenzogiudici5
Sono ancora qui :)
Del codice che mi hai passato credo di aver capito tutto, ora mi sono chiari gli errori e soprattuto il perchè sbagliavo. Sono invece ancora un po' in confusione con la creazione del database. Ho scaricato il programma che mi hai suggerito, ma non riesco proprio a tirar fuori un file sql..
riesci a darmi qualche dritta per il suo funzionamento?
Beh, niente di che. Devi creare un nuovo db vuoto, aggiungere la tabella android_metadata con un solo campo chiamato 'locale' e un solo record con valore 'it_IT'. Puoi usare anche la seguente query:
CREATE TABLE “android_metadata” (“locale” TEXT DEFAULT ‘it_IT’) and INSERT INTO “android_metadata” VALUES (‘it_IT’)
Dopodichè puoi aggiungere tutte le tabelle che vuoi.
Un'unica accortezza: se ti metti ad usare Cursor e simili è necessario che -in ogni nuova tabella- il campo primary key abbia il nome '_id'. Alternativamente puoi chiamare il campo primary key come ti pare (ad esempio 'id' o 'idContatto' o come vuoi tu) a parte che rispetti il vincolo di costruire le interrogazioni rinominando in query il campo -ad esempio- 'idContatto' come '_id', ovvero: SELECT idContatto AS _id, Nome, Cognome, Telefono, .... FROM Contatti WHERE Cognome like '%xxx%' ... e così via.. :)
-
Buongiorno a tutti, son nuovo del forum e anche di android...ma non di Java fortunately.
Sto impazzendo pure io su SQLite. Devo usare un mioDB di 6 mega con tutti i contatti. Ho provato il codice che avete impostato all'inizio della conversazione. Ho spostato il copyDatabase prima del getReadableDatabase, ma nonostante questo mi va in exception nella copia dall'assets in databases.....
while ((length = assetsDB.read(buffer))>0){
dbOut.write(buffer, 0, length);
}
proprio qui!
Qualcuno puoi gentilmente aiutarmi? Grazie mille per qualsiasi info