Autore Topic: Unable to open database (gioogle api inside), sto impazzendo!!!!  (Letto 1178 volte)

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
0
Ragazzi vi chiedo aiuto urgente, perché veramente sto impazzendo:
ho un'app a tab, su android 2.3.3, che prende un db nella cartella assets e se lo salva nella solita data/data/package/databases.
e fino a qui funziona tutto.
ora, in un tab ho aggiunto google maps e quindi le google api, la uses-library nel manifest, e l'emulatore google api 10 2.3.3
ecco, da adesso non funziona più il db!
ho sempre questo cavolo di errore "unable to open database file!
si può sapere cosa è successo???
Questo è il codice:
database.java:
Codice: [Seleziona]
package it.mi.mio;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class Database_mio extends SQLiteOpenHelper{
   
    //The Android's default system path of your application database.
    private static final String DB_PATH = "/data/data/it.mi.mio/databases/";
    private static final String DB_NAME = "DB_MIO.sqlite";
    private SQLiteDatabase myDataBase;
    private final Context myContext;

    public Database_mio(Context context) {
            super(context, DB_NAME, null, 1);
            this.myContext = context;
    }       
     
    public void createDataBase() throws IOException{
            boolean dbExist = checkDataBase();
            if(dbExist){
                    //do nothing - database already exist
            }else{
     
                    //By calling this method and empty database will be created into the default system path
                    //of your application so we are gonna be able to overwrite that database with our database.
                    this.getReadableDatabase();
                    try {
                            copyDataBase();
                    } catch (IOException e) {
                            throw new Error("Error copying database");
                    }
            }
    }
     
    /**
      * Check if the database already exist to avoid re-copying the file each time you open the application.
      * @return true if it exists, false if it doesn't
      */
    private boolean checkDataBase(){
            SQLiteDatabase checkDB = null;
            try{
                    String myPath = DB_PATH + DB_NAME;
                    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;
    }
     
    /**
      * Copies your database from your local assets-folder to the just created empty database in the
      * system folder, from where it can be accessed and handled.
      * This is done by transfering bytestream.
      * */
    private void copyDataBase() throws IOException{
            //Open your local db as the input stream
            InputStream myInput = myContext.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
            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();
    }
     
    public Database_mio openDataBase() throws SQLException{
            //Open the database
            String myPath = DB_PATH + DB_NAME;
            myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
            return this;
    }
         
    @Override
    public void close() {
                    myDataBase.close();
    }
     
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
     
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
     
    // Add your public helper methods to access and get content from the database.
    // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
    // to you to create adapters for your views.
        public Cursor prodotti_novita() {
            String[] columns=new String[]{"_id","prodotto"};
            Cursor c=myDataBase.query("catalogo",columns,"novita=1",null,null,null,"_id");
            return c;
        }
        public Cursor catalogo_prodotti() {
            String[] columns=new String[]{"_id","prodotto"};
            Cursor c=myDataBase.query("catalogo",columns,"id_parent=0",null,null,null,"_id");
            return c;
        }
}


java interessato:
Codice: [Seleziona]
package it.mi.mio;

import android.app.Activity;
import android.app.AlertDialog;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.AdapterView.OnItemClickListener;

public class Novita extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.novita);
            Database_mio db_mio=new Database_mio(this);
            db_mio.openDataBase();
            final Cursor data=db_mio.prodotti_novita();
            final ListView listView1 = (ListView) findViewById(R.id.list_mia);
            String[] from = new String[] {"prodotto"};
            int[] to = new int[] { android.R.id.text1 };
            SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1, data, from, to);
            listView1.setAdapter(adapter);
            final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            listView1.setOnItemClickListener(new OnItemClickListener(){
                    @Override
                public void onItemClick(AdapterView<?> parent, View view,int position, long _id){
                alertDialog.setTitle("Titolo"+_id);
                alertDialog.show();
                }
            });
    }
}


qualcuno riesce ad aiutarmi???
Thanks!!!

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Unable to open database (gioogle api inside), sto impazzendo!!!!
« Risposta #1 il: 01 Agosto 2012, 19:20:09 CEST »
0
senza il logcat no di certo...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Unable to open database (gioogle api inside), sto impazzendo!!!!
« Risposta #2 il: 01 Agosto 2012, 20:04:24 CEST »
0
Domani mattina lo posterò allora, comunque l'unico errore comprensibile è quello scritto, unable to open database file

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Unable to open database (gioogle api inside), sto impazzendo!!!!
« Risposta #3 il: 02 Agosto 2012, 09:40:13 CEST »
0
Ho allegato il logcat, grazie.

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Unable to open database (gioogle api inside), sto impazzendo!!!!
« Risposta #4 il: 02 Agosto 2012, 09:43:05 CEST »
0
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline zak84

  • Utente normale
  • ***
  • Post: 165
  • Respect: +2
    • Mostra profilo
Re:Unable to open database (gioogle api inside), sto impazzendo!!!!
« Risposta #5 il: 02 Agosto 2012, 09:55:41 CEST »
0
Scusa, solo che prima credevo fosse l'emulatore e poi ho trovato la specifica del problema.
Ma non capendo a quale categoria fosse collegato, ho ripostato.