Java 在SQLite中存储Android标记时出错

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

我试图在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

这是我的密码:

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很高兴为您提供帮助。此外,您可以通过单击答案左侧的复选标记来接受回答,以将此问题标记为已解决。