阅读从SQLite数据库值谷歌地图标记 [英] Reading values from SQLite Database for Google Map Markers

查看:256
本文介绍了阅读从SQLite数据库值谷歌地图标记的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想读取位置(经纬度)值以及从pre-取得SQLite数据库的标题。我得到的问题是,它似乎显示地图上的标记,但无关的DB值 - 这是几乎一样,如果他们正在读错

我MonumentsDatabase.java类(其中我处理数据库):

 公共类MonumentsDatabase扩展SQLiteOpenHelper {
公共静态字符串DATABASE_NAME =antiquityDatabase.db;
公共最后静态字符串DATABASE_PATH =/data/data/com.example.antiquity/databases/;
私有静态最终诠释DATABASE_VERSION = 1;
INT _id;
双_lat;
双_lng;串_title;
串_date;
串_description;的String [] = _idColumn {_id};
的String [] = latColumn {纬度};
的String [] = lngColumn {经度};
的String [] = titleColumn {称号};
的String [] = dateColumn {日期};
的String [] = descColumn {说明};
私人SQLiteDatabase数据库;
私人最终上下文myContext;公共MonumentsDatabase(上下文的背景下){
    超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
    this.myContext =背景;
}公共无效的CreateDatabase()抛出IOException
    布尔databaseExist = checkDatabase();    如果(databaseExist){
        //没做什么
    }其他{
        this.getReadableDatabase();        尝试{
            copyDatabase();        }赶上(IOException异常五){
            抛出新的错误(错误复制数据库);
        }
    }
}私人布尔checkDatabase(){
    SQLiteDatabase checkDatabase = NULL;    尝试{
        字符串mypath中= DATABASE_PATH + DATABASE_NAME;
        checkDatabase = SQLiteDatabase.openDatabase(mypath中,空,SQLiteDatabase.OPEN_READONLY);
    }赶上(SQLiteException E){
        //数据库犯规还不存在
    }    如果(checkDatabase!= NULL){
        checkDatabase.close();
    }    返回checkDatabase!= NULL?真假;
}私人无效copyDatabase()抛出IOException    InputStream的myInput = myContext.getAssets()开(DATABASE_NAME)。    字符串outputFilename = DATABASE_PATH + DATABASE_NAME;    的OutputStream myOutput =新的FileOutputStream(outputFilename);    字节[]缓冲区=新的字节[1024];
    INT长;
    而((长度= myInput.read(缓冲液))大于0){
        myOutput.write(缓冲液,0,长度);
    }    myOutput.flush();
    myOutput.close();
    myInput.close();
}公共无效的openDatabase()抛出的SQLException {    字符串mypath中= DATABASE_PATH + DATABASE_NAME;
    数据库= SQLiteDatabase.openDatabase(mypath中,空,SQLiteDatabase.OPEN_READONLY);
}@覆盖
公共同步无效的close(){
    如果(数据库!= NULL){
        database.close();
    }
    super.close();
}@覆盖
公共无效的onCreate(SQLiteDatabase DB){}@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){}公众诠释的getID(){
    光标idQuery = database.query(古迹,_idColumn,NULL,NULL,NULL,NULL,NULL);
    如果(idQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = idQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(idQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(的getID() - ID的String.format(行:%d,值:%S,idQuery.getPosition(),sb.toString()));        }
        而(idQuery.moveToNext());
    }
    返回_id;
}公共无效SETID(INT ID){
    _id = ID;
}公共双getLat(){
    光标latQuery = database.query(古迹,latColumn,NULL,NULL,NULL,NULL,NULL);    latQuery.moveToFirst();
    如果(latQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = latQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(latQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(getLat() - 纬度的String.format(行:%d,值:%S,latQuery.getPosition(),sb.toString()));        }
        而(latQuery.moveToNext());
    }
    返回_lat;
}公共无效setLat(双LAT){
    _lat =纬度;
}公共双getLng(){
    光标lngQuery = database.query(古迹,lngColumn,NULL,NULL,NULL,NULL,NULL);    如果(lngQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = lngQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(lngQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(getLng() - 经度的String.format(行:%d,值:%S,lngQuery.getPosition(),sb.toString()));        }
        而(lngQuery.moveToNext());
    }
    返回_lng;
}公共无效setLng(双LNG){
    _lng = LNG;
}
//处理古迹冠军
公共字符串的getTitle(){
    光标titleQuery = database.query(古迹,titleColumn,NULL,NULL,NULL,NULL,NULL);    如果(titleQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = titleQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(titleQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(的getTitle() - 标题的String.format(行:%d,值:%S,titleQuery.getPosition(),sb.toString()));        }
        而(titleQuery.moveToNext());
    }
    返回_title;
}公共无效的setTitle(字符串名称){
    _title =称号;
}公共字符串GETDATE(){
    光标dateQuery = database.query(古迹,dateColumn,NULL,NULL,NULL,NULL,NULL,NULL);
    如果(dateQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = dateQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(dateQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(GETDATE() - DATE,的String.format(行:%d,值:%S,dateQuery.getPosition(),sb.toString()));        }
        而(dateQuery.moveToNext());
    }
    归期;
}公共无效的setDate(字符串日期){    _date =日期;
}公共字符串getDescription(){
    光标descriptionQuery = database.query(古迹,descColumn,NULL,NULL,NULL,NULL,NULL,NULL);
    如果(descriptionQuery.moveToFirst()){
        做{
            StringBuilder的SB =新的StringBuilder();
            INT columnsQty = descriptionQuery.getColumnCount();
            对(INT IDX = 0; idx的&下; columnsQty ++ IDX){
                sb.append(descriptionQuery.getString(IDX));
                如果(IDX&下; columnsQty - 1)
                    sb.append(;);
            }
            Log.v(描述getDescription() - 描述,的String.format(行:%d,值:%S,descriptionQuery.getPosition(),sb.toString()));        }
        而(descriptionQuery.moveToNext());    }
    返回_description;
}公共无效setDescription(字符串描述){
    _description =描述;
}公共无效addMarker(MarkerObject米){
    m.getTitle();}公众的ArrayList< MonumentsDatabase> arrayDB(){
    ArrayList的< MonumentsDatabase> AD =新的ArrayList< MonumentsDatabase>();
    //aD​​.add(的getTitle());    传回广告;
}

}

我MainActivity.java类:

 公共类MainActivity扩展FragmentActivity {私人GoogleMap的地图;
意图的数据;
MonumentsDatabase monDatabase;
ArrayList的< MonumentsDatabase> mDatabase;
INT _id;
双_lat;
双_lng;
双板条;
双SLNG;
串_title;
字符串名称;
双拉特;
双LNGS;
经纬度markerPosition;
INT I;
私人标记BIGBEN;
私人标记mainMarker;
私人标记parliamentSQ;
私人标记议会;
私人标记随机的;
静态最终经纬度议会=新的经纬度(51.499776600000000000,-0.125173099999983600);
//静态最后的经纬度标志物=新的经纬度(getLatitude(),getLongitude());
静态最终经纬度PARLIAMENTSQ =新的经纬度(51.5006,-0.1267);
最终静态随机经纬度=新的经纬度(51.5019,-0.1257);
的LocationManager的LocationManager;
上下文的背景下=这;
@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);    地图=((SupportMapFragment)getSupportFragmentManager()findFragmentById(R.id.map)。)的GetMap();    map.setOnInfoWindowClickListener(新OnInfoWindowClickListener(){
        @覆盖
        公共无效onInfoWindowClick(标记标记){
           意图数据=新意图(MainActivity.this,DisplayData.class);
           startActivity(数据);        }
    });    ArrayList的< MonumentsDatabase> MDB =的CreateDatabase();
    对于(i = 0; I< mDB.size();我++){
        //获取的DB是什么样的地位,并得到纬度和经度
        SLAT = mDB.get(I).getLat();
        SLNG = mDB.get(ⅰ).getLng();
        markerPosition =新的经纬度(SLAT,SLNG);
        map.addMarker(新的MarkerOptions()
            .POSITION(markerPosition)
            .title伪(mDB.get(ⅰ).getTitle())
            是.snippet(点击更多信息。)
            .icon(BitmapDesc​​riptorFactory.fromResource(R.drawable.custom_marker)));
    }    的LocationManager =(的LocationManager)getSystemService(Context.LOCATION_SERVICE);    如果(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
        disabledGPS();
    }    map.setMyLocationEnabled(真);
}
私人无效disabledGPS(){
    最后AlertDialog.Builder gpsDisabled =新AlertDialog.Builder(本);
    gpsDisabled.setMessage(这个程序需要GPS启用。你要继续吗?)
        .setCancelable(假)
        .setPositiveButton(是,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释的id){
                startActivity(新意图(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        })
        .setNegativeButton(否,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释的id){
                dialog.cancel();
            }
        });
    AlertDialog mainAlert = gpsDisabled.create();
    mainAlert.show();
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.main,菜单);
    返回true;
}公众的ArrayList< MonumentsDatabase>的CreateDatabase(){
    monDatabase =新MonumentsDatabase(本​​);
    尝试{
        monDatabase.createDatabase();
    }赶上(IOException异常IOE){
        抛出新的错误(无法创建数据库);
    }
    尝试{
        monDatabase.openDatabase();
    }赶上(的SQLException SQLE){
        扔SQLE;
    }    mDatabase =新的ArrayList< MonumentsDatabase>();
    monDatabase.setTitle(职称);
    monDatabase.setLat(拉特);
    monDatabase.setLng(LNGS);
    标题= monDatabase.getTitle();
    拉特= monDatabase.getLat();
    LNGS = monDatabase.getLng();
    mDatabase.add(monDatabase);    返回mDatabase;
}

}

我希望发生的是标题,纬度和经度值读取和作为谷歌地图标记显示,目前有20条记录中的SQLite数据库。

任何帮助很多AP preciated!

编辑:

登录猫打印出的数据如此:

  12月2日至24日:55:11.691:V /的getTitle() -  TITLE(18411):行:0,值:大本钟
12月2日至24日:55:11.692:V /的getTitle() - TITLE(18411):行:1,值:斯旺西城堡
12月2日至24日:55:11.693:V /的getTitle() - TITLE(18411):行:2,值:卡迪夫城堡
12月2日至24日:55:11.694:V /的getTitle() - TITLE(18411):行:3,值:曼波斯灯塔
12月2日至24日:55:11.695:V /的getTitle() - TITLE(18411):行:4,值:Sketty大厅
12月2日至24日:55:11.695:V /的getTitle() - TITLE(18411):行:5,值:圣玛丽教堂,斯旺西
12月2日至24日:55:11.696:V /的getTitle() - TITLE(18411):行:6,值:Loughor
12月2日至24日:55:11.696:V /的getTitle() - TITLE(18411):行:7,值:Oystermouth城堡
12月2日至24日:55:11.696:V /的getTitle() - TITLE(18411):行:8,值:奥斯维奇城堡
12月2日至24日:55:11.696:V /的getTitle() - TITLE(18411):行:9,值:Penlle'r山庄
12月2日至24日:55:11.696:V /的getTitle() - TITLE(18411):行:10,值:潘纳德城堡
12月2日至24日:55:11.698:V /的getTitle() - TITLE(18411):行:11,值:皇宫剧院
12月2日至24日:55:11.699:V /的getTitle() - TITLE(18411):行:12,值:莫里斯城堡
12月2日至24日:55:11.699:V /的getTitle() - TITLE(18411):行:13,值:城堡电影院
12月2日至24日:55:11.699:V /的getTitle() - TITLE(18411):行:14,值:港口艾农
12月2日至24日:55:11.700:V /的getTitle() - TITLE(18411):行:15,值:Penrice城堡
12月2日至24日:55:11.700:V /的getTitle() - TITLE(18411):行:16,值:Weobley城堡
12月2日至24日:55:11.700:V /的getTitle() - TITLE(18411):行:17,值:圣Fagans城堡
12月2日至24日:55:11.700:V /的getTitle() - TITLE(18411):行:18,值:Gregynog大厅
12月2日至24日:55:11.700:V /的getTitle() - TITLE(18411):行:19,值:马格姆城堡
12月2日至24日:55:11.702:V / getLat() - 纬度(18411):行:0,值:51.5008
12月2日至24日:55:11.703:V / getLat() - 纬度(18411):行:1,值:51.6203
12月2日至24日:55:11.703:V / getLat() - 纬度(18411):行:2,值:51.4824
12月2日至24日:55:11.703:V / getLat() - 纬度(18411):行:3,值:51.5671
12月2日至24日:55:11.703:V / getLat() - 纬度(18411):行:4,值:51.6131
12月2日至24日:55:11.704:V / getLat() - 纬度(18411):行:5,值:51.619
12月2日至24日:55:11.704:V / getLat() - 纬度(18411):行:6,值:51.6626
12月2日至24日:55:11.704:V / getLat() - 纬度(18411):行:7,值:51.5765
12月2日至24日:55:11.704:V / getLat() - 纬度(18411):行:8,值:51.5546
12月2日至24日:55:11.705:V / getLat() - 纬度(18411):行:9,值:51.7691
12月2日至24日:55:11.705:V / getLat() - 纬度(18411):行:10,值:51.5766
12月2日至24日:55:11.705:V / getLat() - 纬度(18411):行:11,值:51.3739
12月2日至24日:55:11.705:V / getLat() - 纬度(18411):行:12,值:51.391
12月2日至24日:55:11.705:V / getLat() - 纬度(18411):行:13,值:51.3715
12月2日至24日:55:11.706:V / getLat() - 纬度(18411):行:14,值:51.5453
12月2日至24日:55:11.706:V / getLat() - 纬度(18411):行:15,值:51.5752
12月2日至24日:55:11.706:V / getLat() - 纬度(18411):行:16,值:51.6128
12月2日至24日:55:11.706:V / getLat() - 纬度(18411):行:17,值:51.4859
12月2日至24日:55:11.707:V / getLat() - 纬度(18411):行:18,值:52.3403
12月2日至24日:55:11.707:V / getLat() - 纬度(18411):行:19,值:51.5628
12月2日至24日:58:56.017:V / getLng() - 经度(18567):行:0,值:-0.1247
12月2日至24日:58:56.018:V / getLng() - 经度(18567):行:1,值:3.9412
12月2日至24日:58:56.018:V / getLng() - 经度(18567):行:2,值:3.1811
12月2日至24日:58:56.018:V / getLng() - 经度(18567):行:3,值:3.9723
12月2日至24日:58:56.018:V / getLng() - 经度(18567):行:4,值:3.9883
12月2日至24日:58:56.020:V / getLng() - 经度(18567):行:5,值:3.943
12月2日至24日:58:56.020:V / getLng() - 经度(18567):行:6,价值:4.06461
12月2日至24日:58:56.020:V / getLng() - 经度(18567):行:7,值:4.00297
12月2日至24日:58:56.020:V / getLng() - 经度(18567):行:8,值:4.16791
12月2日至24日:58:56.021:V / getLng() - 经度(18567):行:9,值:3.9356
12月2日至24日:58:56.024:V / getLng() - 经度(18567):行:10,值:4.1023
12月2日至24日:58:56.025:V / getLng() - 经度(18567):行:11,值:3.5628
12月2日至24日:58:56.026:V / getLng() - 经度(18567):行:12,值:3.562
12月2日至24日:58:56.027:V / getLng() - 经度(18567):行:13,值:3.5629
12月2日至24日:58:56.027:V / getLng() - 经度(18567):行:14,值:4.215
12月2日至24日:58:56.027:V / getLng() - 经度(18567):行:15,值:4.1703
12月2日至24日:58:56.027:V / getLng() - 经度(18567):行:16,值:4.1994
12月2日至24日:58:56.028:V / getLng() - 经度(18567):行:17,值:3.2677
12月2日至24日:58:56.028:V / getLng() - 经度(18567):行:18,值:3.2108
12月2日至24日:58:56.029:V / getLng() - 经度(18567):行:19,值:3.7254


解决方案

经纬度不被检索,因为这些方法 getLat() getLng()检索的错来自光标。

由于您选择从数据库中只有一列,你必须得到列索引0,而不是1或2,你是里面的 getLat做() getLng()方法。

里面那些方法,做到这一点:

  // getLat()方法
_lat = latQuery.getDouble(0);// getLng()方法
_lng = lngQuery.getDouble(0);

I'm trying to read position (Latitude, Longitude) values and a title from a pre-made SQLite database. The problem I'm getting is that it seems to display a Marker on the map, but has nothing to do with the values in the DB - it's almost as if they're being read incorrectly.

My MonumentsDatabase.java class (where I handle the database):

public class MonumentsDatabase extends SQLiteOpenHelper {
public static String DATABASE_NAME = "antiquityDatabase.db";
public final static String DATABASE_PATH = "/data/data/com.example.antiquity/databases/";
private static final int DATABASE_VERSION = 1;
int _id;
double _lat;
double _lng;

String _title;
String _date;
String _description;

String[] _idColumn = {"_id"};
String[] latColumn = {"latitude"};
String[] lngColumn = {"longitude"};
String[] titleColumn = {"title"};
String[] dateColumn = {"date"};
String[] descColumn = {"description"};


private SQLiteDatabase database;
private final Context myContext;

public MonumentsDatabase(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    this.myContext = context;
}

public void createDatabase() throws IOException {
    boolean databaseExist = checkDatabase();

    if(databaseExist) {
        //Do nothing
    } else {
        this.getReadableDatabase();

        try {
            copyDatabase();

        } catch (IOException e) {
            throw new Error("Error copying database");
        }
    }
}

private boolean checkDatabase() {
    SQLiteDatabase checkDatabase = null;

    try {
        String myPath = DATABASE_PATH + DATABASE_NAME;
        checkDatabase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    } catch (SQLiteException e) {
        //database doesnt exist yet
    }

    if(checkDatabase != null) {
        checkDatabase.close();
    }

    return checkDatabase != null ? true : false;
}

private void copyDatabase() throws IOException {

    InputStream myInput = myContext.getAssets().open(DATABASE_NAME);

    String outputFilename = DATABASE_PATH + DATABASE_NAME;

    OutputStream myOutput = new FileOutputStream(outputFilename);

    byte[] buffer = new byte[1024];
    int length;
    while((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    myOutput.flush();
    myOutput.close();
    myInput.close();
}

public void openDatabase() throws SQLException {

    String myPath = DATABASE_PATH + DATABASE_NAME;
    database = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}

@Override
public synchronized void close() {
    if(database != null) {
        database.close();
    }
    super.close();
}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public int getID() { 
    Cursor idQuery = database.query("monuments", _idColumn, null, null, null, null, null);
    if (idQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = idQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(idQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getID() - ID", String.format("Row: %d, Values: %s", idQuery.getPosition(), sb.toString()));

        }
        while (idQuery.moveToNext());
    }
    return _id;
}

public void setID(int id) {
    _id = id;
}

public double getLat() {
    Cursor latQuery = database.query("monuments", latColumn,  null, null, null, null, null);

    latQuery.moveToFirst();
    if (latQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = latQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(latQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getLat() - LATITUDE", String.format("Row: %d, Values: %s", latQuery.getPosition(), sb.toString()));

        }
        while (latQuery.moveToNext());


    }       
    return _lat;
}

public void setLat(double lat) {
    _lat = lat;
}

public double getLng() {
    Cursor lngQuery = database.query("monuments", lngColumn,  null, null, null, null, null);

    if (lngQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = lngQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(lngQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getLng() - LONGITUDE", String.format("Row: %d, Values: %s", lngQuery.getPosition(), sb.toString()));

        }
        while (lngQuery.moveToNext());
    }
    return _lng;
}

public void setLng(double lng) {
    _lng = lng;
}
// Handle the monuments titles
public String getTitle() {
    Cursor titleQuery = database.query("monuments", titleColumn,  null, null, null, null, null);

    if (titleQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = titleQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(titleQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getTitle() - TITLE", String.format("Row: %d, Values: %s", titleQuery.getPosition(), sb.toString()));

        }
        while (titleQuery.moveToNext());
    }
    return _title;
}

public void setTitle(String title) {
    _title = title;
}

public String getDate() {
    Cursor dateQuery = database.query("monuments", dateColumn, null, null, null, null, null, null);
    if (dateQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = dateQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(dateQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getDate() - DATE", String.format("Row: %d, Values: %s", dateQuery.getPosition(), sb.toString()));

        }
        while (dateQuery.moveToNext());
    }
    return _date;
}

public void setDate(String date) {

    _date = date;
}

public String getDescription() {
    Cursor descriptionQuery = database.query("monuments", descColumn, null, null, null, null, null, null);
    if (descriptionQuery.moveToFirst()) {
        do {
            StringBuilder sb = new StringBuilder();
            int columnsQty = descriptionQuery.getColumnCount();
            for (int idx=0; idx<columnsQty; ++idx) {
                sb.append(descriptionQuery.getString(idx));
                if (idx < columnsQty - 1)
                    sb.append("; ");
            }
            Log.v("getDescription() - DESCRIPTION", String.format("Row: %d, Values: %s", descriptionQuery.getPosition(), sb.toString()));

        }
        while (descriptionQuery.moveToNext());

    }
    return _description;
}

public void setDescription(String description) {
    _description = description;
}

public void addMarker(MarkerObject m) {
    m.getTitle();

}

public ArrayList<MonumentsDatabase> arrayDB() {
    ArrayList<MonumentsDatabase> aD = new ArrayList<MonumentsDatabase>();
    //aD.add(getTitle());

    return aD;
}

}

My MainActivity.java class:

public class MainActivity extends FragmentActivity {

private GoogleMap map;
Intent data;    
MonumentsDatabase monDatabase;
ArrayList<MonumentsDatabase> mDatabase;
int _id;
double _lat;
double _lng;
double sLat;
double sLng;
String _title;
String titles;
double lats;
double lngs;
LatLng markerPosition;
int i;
private Marker bigBen;
private Marker mainMarker;
private Marker parliamentSQ;
private Marker parliament;
private Marker random;


static final LatLng PARLIAMENT = new LatLng(51.499776600000000000, -0.125173099999983600);
//static final LatLng MARKERS = new LatLng(getLatitude(), getLongitude());
static final LatLng PARLIAMENTSQ = new LatLng(51.5006, -0.1267);
static final LatLng RANDOM = new LatLng(51.5019, -0.1257);
LocationManager locationManager;
Context context = this;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    map=((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

    map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
        @Override
        public void onInfoWindowClick(Marker marker) {
           Intent data = new Intent(MainActivity.this, DisplayData.class);
           startActivity(data);

        }
    });

    ArrayList<MonumentsDatabase> mDB = createDatabase();


    for(i = 0; i < mDB.size(); i++) {
        //Get position of what the DB is and get the latitude and longitude
        sLat = mDB.get(i).getLat();
        sLng = mDB.get(i).getLng();
        markerPosition = new LatLng(sLat, sLng);
        map.addMarker(new MarkerOptions()
            .position(markerPosition)
            .title(mDB.get(i).getTitle())
            .snippet("Click for more info.")
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.custom_marker))); 
    }





    locationManager = (LocationManager) getSystemService( Context.LOCATION_SERVICE );

    if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
        disabledGPS();
    }       

    map.setMyLocationEnabled(true);
}




private void disabledGPS() {
    final AlertDialog.Builder gpsDisabled = new AlertDialog.Builder(this);
    gpsDisabled.setMessage("This app requires GPS to be enabled. Do you wish to continue?")
        .setCancelable(false)
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS));
            }
        })
        .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
    AlertDialog mainAlert = gpsDisabled.create();
    mainAlert.show();
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public ArrayList<MonumentsDatabase> createDatabase() {
    monDatabase = new MonumentsDatabase(this);
    try {   
        monDatabase.createDatabase();
    } catch (IOException ioe) {
        throw new Error("Unable to create database");
    }
    try {
        monDatabase.openDatabase();
    }catch(SQLException sqle){ 
        throw sqle;
    }

    mDatabase = new ArrayList<MonumentsDatabase>();
    monDatabase.setTitle(titles);
    monDatabase.setLat(lats);
    monDatabase.setLng(lngs);
    titles = monDatabase.getTitle();
    lats = monDatabase.getLat();
    lngs = monDatabase.getLng();
    mDatabase.add(monDatabase);

    return mDatabase;
}

}

What I want to happen is for title, latitude and longitude values read and displayed as Markers on Google Maps, there are currently 20 records in the SQLite database.

Any help is much appreciated!

EDIT:

Log cat prints out the data as so:

02-24 12:55:11.691: V/getTitle() - TITLE(18411): Row: 0, Values: Big Ben
02-24 12:55:11.692: V/getTitle() - TITLE(18411): Row: 1, Values: Swansea Castle
02-24 12:55:11.693: V/getTitle() - TITLE(18411): Row: 2, Values: Cardiff Castle
02-24 12:55:11.694: V/getTitle() - TITLE(18411): Row: 3, Values: Mumbles Lighthouse
02-24 12:55:11.695: V/getTitle() - TITLE(18411): Row: 4, Values: Sketty Hall
02-24 12:55:11.695: V/getTitle() - TITLE(18411): Row: 5, Values: St Mary's Church, Swansea
02-24 12:55:11.696: V/getTitle() - TITLE(18411): Row: 6, Values: Loughor
02-24 12:55:11.696: V/getTitle() - TITLE(18411): Row: 7, Values: Oystermouth Castle
02-24 12:55:11.696: V/getTitle() - TITLE(18411): Row: 8, Values: Oxwich Castle
02-24 12:55:11.696: V/getTitle() - TITLE(18411): Row: 9, Values: Penlle'r Castell
02-24 12:55:11.696: V/getTitle() - TITLE(18411): Row: 10, Values: Pennard Castle
02-24 12:55:11.698: V/getTitle() - TITLE(18411): Row: 11, Values: The Palace Theatre
02-24 12:55:11.699: V/getTitle() - TITLE(18411): Row: 12, Values: Morris Castle
02-24 12:55:11.699: V/getTitle() - TITLE(18411): Row: 13, Values: Castle Cinema
02-24 12:55:11.699: V/getTitle() - TITLE(18411): Row: 14, Values: Port Eynon
02-24 12:55:11.700: V/getTitle() - TITLE(18411): Row: 15, Values: Penrice Castle
02-24 12:55:11.700: V/getTitle() - TITLE(18411): Row: 16, Values: Weobley Castle
02-24 12:55:11.700: V/getTitle() - TITLE(18411): Row: 17, Values: St Fagans Castle
02-24 12:55:11.700: V/getTitle() - TITLE(18411): Row: 18, Values: Gregynog Hall
02-24 12:55:11.700: V/getTitle() - TITLE(18411): Row: 19, Values: Margam Castle
02-24 12:55:11.702: V/getLat() - LATITUDE(18411): Row: 0, Values: 51.5008
02-24 12:55:11.703: V/getLat() - LATITUDE(18411): Row: 1, Values: 51.6203
02-24 12:55:11.703: V/getLat() - LATITUDE(18411): Row: 2, Values: 51.4824
02-24 12:55:11.703: V/getLat() - LATITUDE(18411): Row: 3, Values: 51.5671
02-24 12:55:11.703: V/getLat() - LATITUDE(18411): Row: 4, Values: 51.6131
02-24 12:55:11.704: V/getLat() - LATITUDE(18411): Row: 5, Values: 51.619
02-24 12:55:11.704: V/getLat() - LATITUDE(18411): Row: 6, Values: 51.6626
02-24 12:55:11.704: V/getLat() - LATITUDE(18411): Row: 7, Values: 51.5765
02-24 12:55:11.704: V/getLat() - LATITUDE(18411): Row: 8, Values: 51.5546
02-24 12:55:11.705: V/getLat() - LATITUDE(18411): Row: 9, Values: 51.7691
02-24 12:55:11.705: V/getLat() - LATITUDE(18411): Row: 10, Values: 51.5766
02-24 12:55:11.705: V/getLat() - LATITUDE(18411): Row: 11, Values: 51.3739
02-24 12:55:11.705: V/getLat() - LATITUDE(18411): Row: 12, Values: 51.391
02-24 12:55:11.705: V/getLat() - LATITUDE(18411): Row: 13, Values: 51.3715
02-24 12:55:11.706: V/getLat() - LATITUDE(18411): Row: 14, Values: 51.5453
02-24 12:55:11.706: V/getLat() - LATITUDE(18411): Row: 15, Values: 51.5752
02-24 12:55:11.706: V/getLat() - LATITUDE(18411): Row: 16, Values: 51.6128
02-24 12:55:11.706: V/getLat() - LATITUDE(18411): Row: 17, Values: 51.4859
02-24 12:55:11.707: V/getLat() - LATITUDE(18411): Row: 18, Values: 52.3403
02-24 12:55:11.707: V/getLat() - LATITUDE(18411): Row: 19, Values: 51.5628
02-24 12:58:56.017: V/getLng() - LONGITUDE(18567): Row: 0, Values: -0.1247
02-24 12:58:56.018: V/getLng() - LONGITUDE(18567): Row: 1, Values: 3.9412
02-24 12:58:56.018: V/getLng() - LONGITUDE(18567): Row: 2, Values: 3.1811
02-24 12:58:56.018: V/getLng() - LONGITUDE(18567): Row: 3, Values: 3.9723
02-24 12:58:56.018: V/getLng() - LONGITUDE(18567): Row: 4, Values: 3.9883
02-24 12:58:56.020: V/getLng() - LONGITUDE(18567): Row: 5, Values: 3.943
02-24 12:58:56.020: V/getLng() - LONGITUDE(18567): Row: 6, Values: 4.06461
02-24 12:58:56.020: V/getLng() - LONGITUDE(18567): Row: 7, Values: 4.00297
02-24 12:58:56.020: V/getLng() - LONGITUDE(18567): Row: 8, Values: 4.16791
02-24 12:58:56.021: V/getLng() - LONGITUDE(18567): Row: 9, Values: 3.9356
02-24 12:58:56.024: V/getLng() - LONGITUDE(18567): Row: 10, Values: 4.1023
02-24 12:58:56.025: V/getLng() - LONGITUDE(18567): Row: 11, Values: 3.5628
02-24 12:58:56.026: V/getLng() - LONGITUDE(18567): Row: 12, Values: 3.562
02-24 12:58:56.027: V/getLng() - LONGITUDE(18567): Row: 13, Values: 3.5629
02-24 12:58:56.027: V/getLng() - LONGITUDE(18567): Row: 14, Values: 4.215
02-24 12:58:56.027: V/getLng() - LONGITUDE(18567): Row: 15, Values: 4.1703
02-24 12:58:56.027: V/getLng() - LONGITUDE(18567): Row: 16, Values: 4.1994
02-24 12:58:56.028: V/getLng() - LONGITUDE(18567): Row: 17, Values: 3.2677
02-24 12:58:56.028: V/getLng() - LONGITUDE(18567): Row: 18, Values: 3.2108
02-24 12:58:56.029: V/getLng() - LONGITUDE(18567): Row: 19, Values: 3.7254

解决方案

The latitude and longitude are not being retrieved, since the methods getLat() and getLng() are retrieving it wrong from the cursor.

Since you are selecting only one column from database, you must get the column index 0, and not 1 or 2 as you were doing inside getLat() and getLng() methods.

Inside those methods, do this:

// getLat() method
_lat = latQuery.getDouble(0); 

// getLng() method
_lng = lngQuery.getDouble(0);

这篇关于阅读从SQLite数据库值谷歌地图标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆