У меня есть база данных SQL, в которой хранятся все координаты (широта и долгота), для их восстановления и установки их на карту путем добавления маркера, я использую этот код:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.geo);
CoordBD CoordBd = new CoordBD(this);
Coordo coordo = new Coordo(36.869686,10.315642 );
CoordBd.open();
CoordBd.insertCoordo(coordo);
maMap = (MapView)findViewById(R.id.myGmap);
maMap.setBuiltInZoomControls(true);
ItemizedOverlayPerso pinOverlay = new ItemizedOverlayPerso(getResources().getDrawable(R.drawable.marker));
db = openOrCreateDatabase(
"coord.bd"
, SQLiteDatabase.CREATE_IF_NECESSARY
, null
);
db.setVersion(1);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
String[] result_columns = new String[] {COL_LATI, COL_LONGI};
Cursor cur = db.query(true, TABLE_COORD, result_columns,
null, null, null, null, null, null);
cur.moveToFirst();
while (cur.isAfterLast() == false) {
int latitude = cur.getColumnIndex("latitude");
int longitude = cur.getColumnIndex("longitude");
GeoPoint point = new GeoPoint(microdegrees(latitude),microdegrees(longitude));
pinOverlay.addPoint(point);
cur.moveToNext();
}
cur.close();
maMap.getOverlays().add(pinOverlay);
monControler = maMap.getController();
monControler.setZoom(12);
Проблема в том, что есть какой-либо показанный маркер (созданный: 36.869686,10.315642). Я почти уверен, что проблема исходит из базы данных SQlite при получении значений.
Есть идеи / исправления?
Спасибо.
public class MaBaseSQLite extends SQLiteOpenHelper {
private static final String TABLE_COORD = "table_coordonnées";
private static final String COL_ID = "ID";
private static final String COL_LATI = "Latitude";
private static final String COL_LONGI = "Longitude";
private static final String CREATE_BDD = "CREATE TABLE " + TABLE_COORD + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_LATI + " TEXT NOT NULL, "
+ COL_LONGI + " TEXT NOT NULL);";
public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//on créé la table à partir de la requête écrite dans la variable CREATE_BDD
db.execSQL(CREATE_BDD);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//On peut fait ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer
//comme ça lorsque je change la version les id repartent de 0
db.execSQL("DROP TABLE " + TABLE_COORD + ";");
onCreate(db);
}
}
CoordBD класс:
public class CoordBD {
private static final int VERSION_BDD = 1;
private static final String NOM_BDD = "coord.bd";
private static final String TABLE_COORD = "table_coordonnées";
private static final String COL_ID = "ID";
private static final int NUM_COL_ID = 0;
private static final String COL_LATI = "Latitude";
private static final int NUM_COL_LATI = 1;
private static final String COL_LONGI = "Longitude";
private static final int NUM_COL_LONGI = 2;
private SQLiteDatabase bdd;
private MaBaseSQLite maBaseSQLite;
public CoordBD(Context context){
//On créer la BDD et sa table
maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
}
public void open(){
//on ouvre la BDD en écriture
bdd = maBaseSQLite.getWritableDatabase();
}
public void close(){
//on ferme l'accès à la BDD
bdd.close();
}
public SQLiteDatabase getBDD(){
return bdd;
}
public long insertCoordo(Coordo coordo){
//Création d'un ContentValues (fonctionne comme une HashMap)
ContentValues values = new ContentValues();
//on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
values.put(COL_LATI, coordo.getlati());
values.put(COL_LONGI, coordo.getlongi());
//on insère l'objet dans la BDD via le ContentValues
return bdd.insert(TABLE_COORD, null, values);
}
public int updateCoordo(int id, Coordo coordo){
//La mise à jour d'un livre dans la BDD fonctionne plus ou moins comme une insertion
//il faut simple préciser quelle livre on doit mettre à jour grâce à l'ID
ContentValues values = new ContentValues();
values.put(COL_LATI, coordo.getlati());
values.put(COL_LONGI, coordo.getlongi());
return bdd.update(TABLE_COORD, values, COL_ID + " = " +id, null);
}
public int removeCoordoWithID(int id){
//Suppression d'un livre de la BDD grâce à l'ID
return bdd.delete(TABLE_COORD, COL_ID + " = " +id, null);
}
public Coordo getCoordoWithLati(String lati){
//Récupère dans un Cursor les valeur correspondant à une coordonnée contenu dans la BDD (ici on sélectionne le livre grâce à son titre)
Cursor c = bdd.query(TABLE_COORD, new String[] {COL_ID, COL_LATI, COL_LONGI}, COL_LONGI + " LIKE \"" + lati +"\"", null, null, null, null);
return cursorToCoordo(c);
}
//Cette méthode permet de convertir un cursor en un latitude/longitude
private Coordo cursorToCoordo(Cursor c){
//si aucun élément n'a été retourné dans la requête, on renvoie null
if (c.getCount() == 0)
return null;
//Sinon on se place sur le premier élément
c.moveToFirst();
//On créé une cordonnée
Coordo coordo = new Coordo();
//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
coordo.setId(c.getInt(NUM_COL_ID));
coordo.setlati(c.getDouble(NUM_COL_LATI));
coordo.setlongi(c.getDouble(NUM_COL_LONGI));
//On ferme le cursor
c.close();
//On retourne la coordonnée
return coordo;
}
}