Autore Topic: DataBase su dispositivo reale  (Letto 434 volte)

Offline OllO

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
DataBase su dispositivo reale
« il: 23 Ottobre 2015, 00:49:08 CEST »
0
Ciao a tutti!

Premetto che ho letto mille post ma (sembra) che nessuno risolva il mio problema, me ne scuso se non fosse così..
Ho creato con Android Studio una piccola app che fa delle semplicissime interrogazione ad un db sqlite, per le prime prove, il db l'ho copiato "a mano" nell'elmulatore (nel solito \data\data\myapp\databases). L'ho copiato poi in assest pensando poi di fargli fare la copia la prima volta che lo carico, nel posto corretto (sempre \data\data\myapp\databases) usando una delle mille guide su questa cosa, ho utilizzato questo codice:

Codice (Java): [Seleziona]
public class Welcome extends Activity {
   
    private static String DB_PATH = "/data/data/myapp/databases";

    private static String DB_NAME = "mydb";
    public void onCreate (Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);

        Log.d("prima dell'if",DB_PATH);

        if (checkDataBase()==false){
            try {
                Log.d("nel try",DB_NAME);
                copyDataBase();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

private boolean checkDataBase(){

        SQLiteDatabase checkDB = null;

        try{
            String myPath = DB_PATH + DB_NAME;
            Log.d("dentro check",myPath);
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

        }catch(SQLiteException e){

            //database does't exist yet.

        }

        if(checkDB != null){

            checkDB.close();

        }

        return checkDB != null ? true : false;
    }

    private void copyDataBase() throws IOException {

        //Open your local db as the input stream
        InputStream myInput = this.getAssets().open(DB_NAME);

        // Path to the just created empty db
        String outFileName = DB_PATH + DB_NAME;

        //Open the empty db as the output stream
        OutputStream myOutput = new FileOutputStream(outFileName);

        //transfer bytes from the inputfile to the outputfile
        Log.d("dentro ccopy",outFileName);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }

        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

    }
}

Anticipo le scuse, il codice dopo il primo if lo devo ancora vedere bene ma, non mi capacito del fatto che se faccio partire l'emulatore su un device, il primo Log.d (prima dell'if) ...non c'è !!
Ed in ogni caso la app prosegue ma senza errori semplicemnte senza db...
Mentre se faccio partire l'emulatore tutta la app funziona (db a mano nel posto giusto) e il primo Log lo vedo senza problemi..

Suggerimenti?

Grazie

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:DataBase su dispositivo reale
« Risposta #1 il: 23 Ottobre 2015, 07:52:10 CEST »
0
Ho solo letto il codice, controlla se esiste il carattere di separazione tra il path del file e il filename, sembra che manchi uno slash '/'. In generale non si usa l'operatore '+' per concatenare il path al filename ma si preferisce usare la classe File.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline OllO

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Re:DataBase su dispositivo reale
« Risposta #2 il: 23 Ottobre 2015, 18:48:29 CEST »
0
Grazie per la risposta. In effetti quello sarà da controllare, il problema però, è che non arrivo a visualizzare neanche il primo Log...
Cioè prima di controllare il percorso, il Log deve uscirmi, o no?
Grazie

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:DataBase su dispositivo reale
« Risposta #3 il: 23 Ottobre 2015, 23:46:51 CEST »
0
Usi i log in modo strano, se ci sono dei filtri sul tag possono non essere mostrati. Leggiti come funzionano e metti come prima parametro un tag unico riconoscibile, in questo modo puoi filtrarlo rispetto a tutti gli altri.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline OllO

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
Re:DataBase su dispositivo reale
« Risposta #4 il: 24 Ottobre 2015, 14:18:26 CEST »
0
Grazie per aver usato il termine strano..potevi dire di peggio  ;-) Sì in realtà volevo solo visualizzare qualcosa a prova del fatto "di essere passato di lì".

Ad ogni modo niente, c'è qualche tassello che mi manca e devo un attimo andare a rivedere meglio la "teoria"..

Grazie