#java #android #sqlite #android-sqlite
Вопрос:
Я пытаюсь сохранить широту и долготу в своей базе данных SQLite. Однако он не сохраняет его и не получает никаких сообщений об ошибках.
Это мой код, который у меня есть до сих пор:
dbHandler = new DBHandler(MapsActivity.this); googleMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { String latLong = latLng.latitude " : " latLng.longitude; dbHandler.addNewLocation(latLong); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(latLng); markerOptions.title(latLng.latitude " : " latLng.longitude); googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); googleMap.addMarker(markerOptions); Toast.makeText(MapsActivity.this, "Location has been added.", Toast.LENGTH_SHORT).show(); } });
А затем класс DBHandler:
public class DBHandler extends SQLiteOpenHelper { private static final String DB_NAME = "locationsdb"; private static final int DB_VERSION = 1; private static final String TABLE_NAME = "mylocations"; private static final String ID_COL = "id"; private static final String NAME_LAT = "lat"; public DBHandler(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String query = "CREATE TABLE " TABLE_NAME " (" ID_COL " INTEGER PRIMARY KEY AUTOINCREMENT, " NAME_LAT " TEXT)"; db.execSQL(query); } public void addNewLocation(String latLong) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(NAME_LAT, latLong); db.insert(TABLE_NAME, null, values); db.close(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // this method is called to check if the table exists already. db.execSQL("DROP TABLE IF EXISTS " TABLE_NAME); onCreate(db); } }
Тогда, когда я проверяю базу данных, в ней ничего не сохраняется?
Может кто-нибудь, пожалуйста, сообщить мне, что я здесь делаю не так?
Спасибо
Комментарии:
1. Проверьте возвращаемое значение
db.insert(TABLE_NAME, null, values)
. Если значение не равно -1, то строка добавляется в таблицу.2. Или используйте
insertOrThrow()
вместо этого, чтобы получить исключение с подробными сведениями о том, почему оно может не сработать.
Ответ №1:
Попробуйте db.beginTransaction()
после звонка getWritableDatabase()
и используйте db.endTransaction()
вместо db.close()
in addNewLocation(...)
.