Visualizzazione stampabile
-
Quote:
Originariamente inviato da
lorenzogiudici5
Ho provato a fare entrambe le cose. L'errore table not found pare aggirato, ora però mi da un NullPointerException.
Idee su quale potrebbe essere il problema a questo punto? :(
Aspetta, farti fare la query di select sulla tabella android_metadata era un test (positivo) per capire che in effetti il .getReadableDatabase ti ha creato il file del db vuoto e tu consulti quello (per questo hai l'error 'table rubrica not found').
In merito al nullpointer exception, puoi postare il logcat relativo? Quando hai l'errore?
-
1 allegato(i)
Allegato 9040 Ti allego il log.
E' vero, il test pare positivo (non mi da più l'errore di table not found), ora questo nullpointer exception però non so proprio da dove possa arrivare
-
Ciao,
ti faccio una domanda perché ho ancora dei problemi.
Io ho la mia classe Login iniziale.
Il mio databaseHelper è così:
public class DatabaseHelper extends SQLiteOpenHelper {
private static String DATABASE_NAME = "cp.db";
private static String DATABASE_PATH = "data/data/miapp/";
private static final int SCHEMA_VERSION = 2;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqlDB) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
private SQLiteDatabase openDataBase(int flag) {
SQLiteDatabase checkDB = null;
try {
String myPath = DATABASE_PATH + DATABASE_NAME;
Environment.getExternalStorageDirectory();
Environment.getDataDirectory();
Environment.getRootDirectory();
Environment.getExternalStorageState();
checkDB = getWritableDatabase();
} catch (Exception e) {
e.printStackTrace();
}
return checkDB;
}
public SQLiteDatabase openDataBaseSynch(int flag) { //per non far confusione con ilan metodo 'openDataBase', questo è usato per la sincronizzazione..
SQLiteDatabase checkDB = null;
try {
String myPath = DATABASE_PATH + DATABASE_NAME;
Environment.getExternalStorageDirectory();
Environment.getDataDirectory();
Environment.getRootDirectory();
Environment.getExternalStorageState();
checkDB = getWritableDatabase();
} catch (Exception e) {
e.printStackTrace();
}
return checkDB;
}
......
}
Nella mia classe Login parto col il mio metodo:
public void login(View view)
{
if (!checkData())
return;
dbManager = new DatabaseHelper(this);
try {
copyDatabase();
}..
e poi uso il tuo metodo:
public void copyDatabase() throws IOException {
InputStream assetsDB = this.getAssets().open("database_sul_dispositivo.db ");
OutputStream dbOut = new FileOutputStream(dbManager.DATABASE_PATH + "DbManager.DATABASE_NAME");
byte[] buffer = new byte[1024];
int length;
while ((length = assetsDB.read(buffer))>0){
dbOut.write(buffer, 0, length);
}
dbOut.flush();
dbOut.close();
assetsDB.close();
}
Ma una volta eseguito il tutto mi dice che non trova le tabelle..
Cosa sbaglio?
-
non fate caso al metodo :
public SQLiteDatabase openDataBaseSynch(int flag)
-
Quote:
Originariamente inviato da
lorenzogiudici5
Allegato 9040 Ti allego il log.
E' vero, il test pare positivo (non mi da più l'errore di table not found), ora questo nullpointer exception però non so proprio da dove possa arrivare
Ciao,
in merito all'errore, che hai in Database_frank17_provaActivity.java:24 (riga 24) ?
-
Ho il metodo per richiamare la query.
String contenutoletto = miodb.queueAll();
-
Quote:
Originariamente inviato da
lorenzogiudici5
Ho il metodo per richiamare la query.
String contenutoletto = miodb.queueAll();
Ok, per sicurezza ricompila il progetto con quella riga commentata, in modo da circoscrivere il problema effettivamente a quella e vedi eseguendo se l' errore non sussiste. poi eseguiamo le dovute correzioni
Inviato dal mio GT-N7000 usando Tapatalk
-
Ho provato a commentare prima e dopo di String contenutoletto = miodb.queueAll();
Se lo metto prima nel Log compare, mentre se metto Log.e dopo non mi compare nel Log. Pare che l'errore sia proprio li..
-
Quote:
Originariamente inviato da
lorenzogiudici5
Ho provato a commentare prima e dopo di String contenutoletto = miodb.queueAll();
Se lo metto prima nel Log compare, mentre se metto Log.e dopo non mi compare nel Log. Pare che l'errore sia proprio li..
Bene, che fa il metodo .queueAll() ? Il null pointer exception deriverà da un mancato istanziamento o ad un riferimento ad un oggetto non ancora allocato in memoria
Inviato dal mio GT-N7000 usando Tapatalk
-
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