Создание таблицы SQLite в Android - PullRequest
2 голосов
/ 03 апреля 2012

Я пытаюсь загрузить значения в таблицу SQLite на Android.Мое приложение продолжает работать, но оно не выдает мне конкретной ошибки, кроме NullPointerException, который полагает, что таблица не создается правильно.

public class MySQLiteHelper{


        private static final String DATABASE_NAME = "breadcrumbs.db";
        private static final int DATABASE_VERSION = 1;
        public static final String TABLE_BREADCRUMBS = "breadcrumbs";
        private static Context context;
        static SQLiteDatabase db;
        private static SQLiteStatement insertStmt;
        private static final String INSERT ="insert into " + TABLE_BREADCRUMBS + " (time,lat,lon) values (?,?,?)";


        public MySQLiteHelper(Context context) {
            MySQLiteHelper.context = context;
            OpenHelper openHelper = new OpenHelper(MySQLiteHelper.context);
            MySQLiteHelper.db = openHelper.getWritableDatabase();
            MySQLiteHelper.insertStmt = MySQLiteHelper.db.compileStatement(INSERT);

        }

        public static long insert(long time,int lat,int lon) {
            insertStmt.bindLong(1, time);
            insertStmt.bindLong(2, lat);
            insertStmt.bindLong(3, lon);
            return insertStmt.executeInsert();
        }

        public void deleteAll() {
            db.delete(TABLE_BREADCRUMBS, null, null);
        }

        public List<String[]> selectAll()
        {
            List<String[]> list = new ArrayList<String[]>();
            Cursor cursor = db.query(TABLE_BREADCRUMBS, new String[] 
                    { "id","time","lat","lon"}, null, null, null, null, null); 
           int x=0;
            if (cursor.moveToFirst()) {
               do {
                    String[] b1=new String[]{cursor.getString(0),cursor.getString(1),cursor.getString(2),
    cursor.getString(3)};
                    list.add(b1);
                    x=x+1;
               } while (cursor.moveToNext());
            }
            if (cursor != null && !cursor.isClosed()) {
               cursor.close();
            } 
           cursor.close();
            return list;
       }

        public void delete(int rowId) {
            db.delete(TABLE_BREADCRUMBS, null, null); 
      } 


    private static class OpenHelper extends SQLiteOpenHelper {
            OpenHelper(Context context) {
                 super(context, DATABASE_NAME, null, DATABASE_VERSION);
            }
            public void onCreate(SQLiteDatabase db) {
                db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY, tim REAL, lat REAL, long REAL);");
                //db.execSQL("CREATE TABLE " + TABLE_BREADCRUMBS + " (id INTEGER PRIMARY KEY AUTOINCREMENT, time REAL, lat REAL, long REAL);");
            }

           @Override
            public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
           {
                 db.execSQL("DROP TABLE IF EXISTS " + TABLE_BREADCRUMBS);
                 onCreate(db);


           }    
     }

И я вызываю метод в другом классе с помощью:

    @Override
            public void onLocationChanged(Location location) {
                int lat = (int) (location.getLatitude() * 1E6);
                int lng = (int) (location.getLongitude() * 1E6);
                long time = (int)(location.getTime() * 1E6);
                GeoPoint point = new GeoPoint(lat, lng);
                createMarker();
                MySQLiteHelper.insert(time,lat,lng);
                mapController.animateTo(point); // mapController.setCenter(point);

            }
}

Возможно, мне нужно как-нибудь вызвать OpenHelper?

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Расширить SQLiteOpenHelper и переопределить два метода onCreate() и onUpgrade()

Вы можете следовать этому действительно полезному руководству

3 голосов
/ 04 апреля 2012

Исправлено путем изменения оператора вставки в соответствии с именем столбца «tim» вместо «time».

3 голосов
/ 03 апреля 2012

Вы должны расширить свой класс SQLiteOpenHelper Я верю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...