Java 在SQLite中存储Android标记时出错
我试图在SQLite数据库中保存位置,并在地图上放置标记。 但我得到以下错误: 致命异常:主进程:com.example.android.myfavplaces,PID:2354 java.lang.RuntimeException:无法启动活动组件信息{com.example.android.myfavplaces/com.example.android.myfavplaces.MapsActivity}:android.database.sqlite.SQLiteException:AUTOINCREMENT仅允许对整数主键代码1:执行,编译时:create table location sloc_idinteger主键AUTOINCREMENT、loc_latdouble、loc_lngdouble、loc_postext 这是我的密码:Java 在SQLite中存储Android标记时出错,java,android,sqlite,google-maps,google-maps-markers,Java,Android,Sqlite,Google Maps,Google Maps Markers,我试图在SQLite数据库中保存位置,并在地图上放置标记。 但我得到以下错误: 致命异常:主进程:com.example.android.myfavplaces,PID:2354 java.lang.RuntimeException:无法启动活动组件信息{com.example.android.myfavplaces/com.example.android.myfavplaces.MapsActivity}:android.database.sqlite.SQLiteException:AUTO
public class LocationsSQLHelper extends SQLiteOpenHelper {
private SQLiteDatabase mDB;
public static final String DATABASE_NAME = "MyDBName.db";
private static final String TABLE_NAME="locations";
private static final String FIELD_ROW_ID="loc_id";
private static final String FIELD_LAT="loc_lat";
private static final String FIELD_LNG="loc_lng";
private static final String FIELD_ZOOM="loc_pos";
private static final int D_VERSION=1;
private static final String DB_NAME="markerlocations.db";
private static final String DB_CREATE="create table "+TABLE_NAME+ "("
+FIELD_ROW_ID + "integer primary key autoincrement, "
+FIELD_LAT + "double , "
+FIELD_LNG + "double ,"
+FIELD_ZOOM + "text"
+");"
;
public LocationsSQLHelper(Context context) {
super(context, DB_NAME, null, D_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DB_CREATE);
}
/** Inserts a new location to the table locations */
public boolean insert(Integer id, Double lat, Double lon, String zoom) {
SQLiteDatabase db=this.getWritableDatabase();
ContentValues contentValues=new ContentValues();
contentValues.put("id", id);
contentValues.put("lat", 12.944400 );
contentValues.put("lon", 75.785966);
contentValues.put(zoom,"zoom");
return true;
}
/** Deletes all locations from the table */
public long del(Integer id){
SQLiteDatabase db = this.getWritableDatabase();
return db.delete("locations",
"id = ? ",
new String[] { Long.toString(id) });
}
public ArrayList<String> getAllLocations(){
ArrayList<String> arrayList=new ArrayList<>();
SQLiteDatabase db=this.getReadableDatabase();
Cursor res=db.rawQuery("select * from locations", null );
res.moveToFirst();
while(res.isAfterLast() == false){
arrayList.add(res.getString(res.getColumnIndex(FIELD_ROW_ID)));
res.moveToNext();
}
return arrayList;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}
}
在integer主键、double…和文本前添加空格,如下所示:
+FIELD_ROW_ID + " integer primary key autoincrement, " +FIELD_LAT + " double , " +FIELD_LNG + " double ," +FIELD_ZOOM + " text" +");"
注意符号后、整数、双精度和文本前的空格。它解决了我的问题,谢谢you@JaveriaA很高兴为您提供帮助。此外,您可以通过单击答案左侧的复选标记来接受回答,以将此问题标记为已解决。