2010-06-06 3 views
1

Salut tout le monde. Je suis un peu nouveau pour la programmation Android alors s'il vous plaît ours avec moi. J'ai quelques problèmes avec la récupération des enregistrements de la base de données. Fondamentalement, tout ce que je veux faire est de stocker les latitudes et les longitudes que les fonctions de positionnement GPS produisent et les afficher dans une liste en utilisant ListActivity sur un onglet différent plus tard. Voici comment le code de ma classe d'aide de dbAdapter ressemble:Android SQLite se bloque après avoir essayé de récupérer des données

public class DBAdapter 
{ 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_LATITUDE = "latitude"; 
    public static final String KEY_LONGITUDE = "longitude"; 
    private static final String TAG = "DBAdapter"; 

    private static final String DATABASE_NAME = "coords"; 
    private static final String DATABASE_TABLE = "coordsStorage"; 
    private static final int DATABASE_VERSION = 1; 

    private static final String DATABASE_CREATE = 
     "create table coordsStorage (_id integer primary key autoincrement, " 
     + "latitude integer not null, longitude integer not null);"; 

    private final Context context; 

    private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public DBAdapter(Context ctx) 
    { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private static class DatabaseHelper extends SQLiteOpenHelper 
    { 
     DatabaseHelper(Context context) 
     { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) 
     { 
      db.execSQL(DATABASE_CREATE); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, 
     int newVersion) 
     { 
      Log.w(TAG, "Upgrading database from version " + oldVersion 
        + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DROP TABLE IF EXISTS titles"); 
      onCreate(db); 
     } 
    }  

    //---opens the database--- 
    public DBAdapter open() throws SQLException 
    { 
     db = DBHelper.getWritableDatabase(); 
     return this; 
    } 

    //---closes the database---  
    public void close() 
    { 
     DBHelper.close(); 
    } 

    //---insert a title into the database--- 
    public long insertCoords(int latitude, int longitude) 
    { 
     ContentValues initialValues = new ContentValues(); 
     initialValues.put(KEY_LATITUDE, latitude); 
     initialValues.put(KEY_LONGITUDE, longitude); 
     return db.insert(DATABASE_TABLE, null, initialValues); 
    } 

    //---deletes a particular title--- 
    public boolean deleteTitle(long rowId) 
    { 
     return db.delete(DATABASE_TABLE, KEY_ROWID + 
       "=" + rowId, null) > 0; 
    } 

    //---retrieves all the titles--- 
    public Cursor getAllTitles() 
    { 
     return db.query(DATABASE_TABLE, new String[] { 
       KEY_ROWID, 
       KEY_LATITUDE, 
       KEY_LONGITUDE}, 
       null, 
       null, 
       null, 
       null, 
       null); 
    } 

    //---retrieves a particular title--- 
    public Cursor getTitle(long rowId) throws SQLException 
    { 
     Cursor mCursor = 
       db.query(true, DATABASE_TABLE, new String[] { 
         KEY_ROWID, 
         KEY_LATITUDE, 
         KEY_LONGITUDE}, 
         KEY_ROWID + "=" + rowId, 
         null, 
         null, 
         null, 
         null, 
         null); 
     if (mCursor != null) { 
      mCursor.moveToFirst(); 
     } 
     return mCursor; 
    } 

    //---updates a title--- 
    /*public boolean updateTitle(long rowId, int latitude, 
    int longitude) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_LATITUDE, latitude); 
     args.put(KEY_LONGITUDE, longitude); 
     return db.update(DATABASE_TABLE, args, 
         KEY_ROWID + "=" + rowId, null) > 0; 
    }*/ 
}

Maintenant, ma question est - je fais quelque chose de mal ici? Si oui, quelqu'un pourrait-il me dire quoi? Et comment dois-je récupérer les enregistrements de façon organisée? De l'aide serait grandement appréciée!!

Ce sont l'erreur, il lance:

06-06 14:49:32.434: ERROR/Database(276): Error inserting latitude=0 longitude=0 
06-06 14:49:32.434: ERROR/Database(276): android.database.sqlite.SQLiteException: no such table: coordsStorage: , while compiling: INSERT INTO coordsStorage(latitude, longitude) VALUES(?, ?); 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteProgram.native_compile(Native Method) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteProgram.compile(SQLiteProgram.java:110) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:41) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteDatabase.compileStatement(SQLiteDatabase.java:925) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1300) 
06-06 14:49:32.434: ERROR/Database(276):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1173) 
06-06 14:49:32.434: ERROR/Database(276):  at tabs.app.DBAdapter.insertCoords(DBAdapter.java:81) 
06-06 14:49:32.434: ERROR/Database(276):  at tabs.app.Tribocracy$1.onClick(Tribocracy.java:118) 
06-06 14:49:32.434: ERROR/Database(276):  at android.view.View.performClick(View.java:2344)

puis quand je suis en train de le récupérer, il jette ceci:

06-06 14:49:52.734: INFO/Process(51): Sending signal. PID: 276 SIG: 3 
06-06 14:49:52.734: INFO/dalvikvm(276): threadid=7: reacting to signal 3 
06-06 14:49:52.734: ERROR/dalvikvm(276): Unable to open stack trace file /data/anr/traces.txt': 
Permission denied
+1

Qu'est-ce qui se passe réellement? Le titre dit "Crashes" - la force de l'application est-elle proche? Si oui, que dit-il dans les journaux (utilisez 'adb logcat')? – Chris

+0

Tout d'abord, merci Chris pour la réponse. J'aurais dû mentionner que je veux insérer un enregistrement dans db sur un clic d'un bouton donc j'appelle les insertCoords comme ceci: db.open(); \t \t db.insertCoords ( \t \t \t \t intLatitude, \t \t \t \t intLongitude \t \t \t \t); \t \t db.close(); et il ne tombe pas en panne (aka force fermer) donc je suppose qu'il insère l'enregistrement dans DB, mais quand je suis en train de le récupérer l'application est do Close Force. Et désolé de demander cela (je suis un débutant complet) mais comment et où puis-je accéder au journal des erreurs? – Pavel

+0

À l'avenir, veuillez vous abstenir d'utiliser une réponse pour contacter un utilisateur qui a fourni une réponse. Vous pouvez laisser un commentaire sur leur réponse, ou vous pouvez éditer votre question. – Will

Répondre

2

Il ressemble à la table n'existe pas pour certains raison.

Vous pouvez essayer d'augmenter votre numéro de version, pour forcer une mise à niveau; si la base de données elle-même existe, la méthode onCreate ne sera pas appelée - l'augmentation de la version forcera onUpgrade à être appelée, et votre implémentation supprime la table et la recrée. Cela devrait soit corriger votre erreur, ou vous donner une nouvelle erreur à travailler avec!

0

Changer votre Latitude et Longitude datatypes doubler

double Latitude; 
double Longitude; 
Questions connexes