创建一个SQLite数据库来存储Geopoint并将它们读到MapActivity上
问题描述:
我想创建一个Map Activity,并且我已经能够成功地从主活动读取一个静态的坐标字符串,但是这是硬编码的,我希望你插入这些坐标到一个SQLite数据库,并为他们阅读。 我试图四处寻找,但我根本无法得到我要找的答案,我会感激,如果有人可以帮助我,请创建一个SQLite数据库来存储Geopoint并将它们读到MapActivity上
继承人我主要活动 - GMapsActivity.java:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView)findViewById(R.id.map_view);
mapView.setBuiltInZoomControls(true);
//mapView.setStreetView(true);
mapController = mapView.getController();
String coordinates[] = {"51.52241608253253","-0.1318359375"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
GeoPoint general = new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6));
mapController.setZoom(10);
mapController.animateTo(general);
mapOverlays = mapView.getOverlays();
drawable = this.getResources().getDrawable(R.drawable.blue);
itemizedOverlay = new NewItemizedOverlay(drawable, this);
GeoPoint point = new GeoPoint((int)(51.555890943494276*1E6), (int)(-0.39989858865737915*1E6));
OverlayItem overlayitem = new OverlayItem(point, "Greenword Veterinary" , "57 Station Approach, South Ruislip, Ruislip, Middlesex, HA4 6SL, 020 8845 8144");
itemizedOverlay.addOverlay(overlayitem);
GeoPoint point2 = new GeoPoint((int)(51.598707*1E6), (int)(-0.393416*1E6));
OverlayItem overlayitem2 = new OverlayItem(point2, "MediVet Pinner" , "2A Pinner Green, Pinner, Middlesex, HA5 2AA, 020 8866 0727");
itemizedOverlay.addOverlay(overlayitem2);
GeoPoint point3 = new GeoPoint((int)(51.670865*1E6), (int)(-0.397034*1E6));
OverlayItem overlayitem3 = new OverlayItem(point3, "MediVet Watford" , "237 Saint Albans Road, Watford, Hertfordshire WD24 5BP, 01923 243 429");
itemizedOverlay.addOverlay(overlayitem3);
mapOverlays.add(itemizedOverlay);
myLocationOverlay = new MyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
这是我的数据库创建者 - DatabaseManager.java
package com.javacodegeeks.android.googlemaps;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseManager {
public static final String KEY_ID = "_id";
public static final String KEY_LAT = "vetlat";
public static final String KEY_LONGI = "vetlongi";
public static final String KEY_NAME = "vetname";
public static final String KEY_INFO = "vetinfo";
private static final String DATABASE_NAME = "myvet.db";
private static final String DATABASE_TABLE = "vetLocations";
private static final int DATABASE_VERSION = 1;
private DbHelper ourHelper;
private final Context ourContext;
private SQLiteDatabase ourDB;
private static class DbHelper extends SQLiteOpenHelper
{
public DbHelper(Context context)
{
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db)
{
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
KEY_LAT + "REAL NOT NULL," +
KEY_LONGI + "REAL NOT NULL," +
KEY_NAME + "TEXT NOT NULL," +
KEY_INFO + "TEXT NOT NULL);"
);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
onCreate(db);
}
}
public DatabaseManager(Context c)
{
ourContext = c;
}
public DatabaseManager open()
{
ourHelper = new DbHelper(ourContext);
ourDB = ourHelper.getReadableDatabase();
return this;
}
public void close()
{
ourHelper.close();
}
}
我是新来的Android编程,所以我会感恩是一个人实际上可以告诉我的代码片段,而不是一般的方向,因为我真的不知道他们笑
编辑: 我已经在SQLite浏览器 创建数据库条目我将如何能够使主要活动文件读取该文件中的值?
一个总体思路,代码会尝试拨打值,如:投入阵列 然后循环它
points = ((int)([lat_value_from_db1*E6]), ((int)([longi_value_from_db1*E6]);
overlay = (points, [name_value_from_db], [info_value_from_db]);
itemizedOverylay.addOverlay(allOverlays);
它只是我真的不知道如何实现这个 SELECT * FROM的DB :/
我真的很感激任何形式的帮助
预先感谢您
答
首先,创建一个类DatabaseObject.java
数据库记录的对象:
// Getting one database object by id
public DatabaseObject get_DatabaseObject(int id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_ID,
KEY_LAT, KEY_LONGI,KEY_NAME,KEY_INFO }, KEY_ID + "=?",
new String[] { String.valueOf(id) }, null, null,null,null);
if (cursor != null)
cursor.moveToFirst();
DatabaseObject data = new DatabaseObject(Integer.parseInt(cursor.getString(0)),
Double.parseDouble(cursor.getString(1)), Double.parseDouble(cursor.getString(2)),cursor.getString(3), cursor.getString(4));
// return database object
return data;
}
// Getting All database objects
public List<DatabaseObject> getAllDatabaseObject() {
List<DatabaseObject> contactList = new ArrayList<DatabaseObject>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
DatabaseObject data = new DatabaseObject();
data.setID(Integer.parseInt(cursor.getString(0)));
data.setLAT(Double.parseDouble(cursor.getString(1)));
data.setLONGI(Double.parseDouble(cursor.getString(2)));
data.setNAME(cursor.getString(3));
data.setINFO(cursor.getString(4));
// Adding contact to list
contactList.add(data);
} while (cursor.moveToNext());
}
// return database object list
return dataList;
}
在任何像这样的活动,现在使用这些:
public class DatabaseObject {
int _id;
double _lat;
double _lng;
String _name;
String _info;
// Empty constructor
public DatabaseObject(){
}
// constructor
public DatabaseObject(int id, double lat, double lng,String name ,String info){
this._id = id;
this._lat=lat;
this._lng=lng;
this._name=name;
this._info=info;
}
public DatabaseObject(double lat, double lng,String name ,String info){
this._lat=lat;
this._lng=lng;
this._name=name;
this._info=info;
}
// constructor
// getting ID
public int getID(){
return this._id;
}
// setting id
public void setID(int id){
this._id = id;
}
public double getlat(){
return this._lat;
}
public void setlat(double lat){
this._lat = lat;
}
public double getlng(){
return this._lng;
}
public void setlng(double lng){
this._lng = lng;
}
public String getname(){
return this._name;
}
// setting id
public void setname(String name){
this._name = name;
}
public String getinfo(){
return this._info;
}
// setting id
public void setinfo(String info){
this._infor= info;
}
}
然后在你的DatabaseManager.java
添加这两种功能
1-将此声明为全局变量:
DatabaseManager db = new DatabaseManager(this);
2-检索所有对象:
List<DatabaseObject> K = db.getAllDatabaseObject();
3-用它,在循环是这样的:
for (DatabaseObject cn : K) {
point = new GeoPoint((int)(cn.getlat()*E6), (int)(cn.getlng()*E6));
overlayitem = new OverlayItem(point, cn.getname(), cn.getinfo());
itemizedOverlay.addOverlay(overlayitem);
mapOverlays.add(itemizedOverlay);
}
非常感谢你确实帮助,非常感谢:) – Ibz786 2012-03-25 20:42:01
没问题的伴侣,快乐编码! – 2012-03-26 00:07:23