2017-07-23 2 views
-1

Je tente d'enregistrer l'emplacement dans SQLite db et de mettre des marqueurs sur la carte. Mais je reçois l'erreur suivante:Erreur lors du stockage d'un marqueur Android dans SQLite

FATAL EXCEPTION: main Process: com.example.android.myfavplaces, PID: 2354 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.myfavplaces/com.example.android.myfavplaces.MapsActivity}: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY (code 1): , while compiling: create table locations(loc_idinteger primary key autoincrement, loc_latdouble , loc_lngdouble ,loc_postext);

Voici mon code:

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); 
    } 


} 

Répondre

1

Ajouter un espace avant "clé primaire entier", "double ..." et "texte" comme suit:

+FIELD_ROW_ID + " integer primary key autoincrement, " +FIELD_LAT + " double , " +FIELD_LNG + " double ," +FIELD_ZOOM + " text" +");" 

Notez l'espace après «signe et avant entier, double et texte.

+0

Il fixe mon problème, merci – javsadi

+0

@JaveriaA Heureux de vous aider. En outre, vous pouvez accepter une réponse (en cliquant sur la coche sur le côté gauche de la réponse) pour marquer cette question comme résolue. – andrei