Java 如何在使用SQLite的Google Maps Marker API上给出名称和不同的图像?
当他们想在Google Maps marker上提供不同的名称和不同的标记图像时,我遇到了困难,我使用SQLite数据库存储来自标记的数据,我的项目中的以下代码: MaBase.java MainActivity.java 然后我会在地图形式的其他布局上调用不同的标记,但是如何在布局中输入数据以显示插入数据库的标记?以下布局将与标记地图一起输入: fragment_maps.xml 请帮忙,谢谢:) 长猫Java 如何在使用SQLite的Google Maps Marker API上给出名称和不同的图像?,java,android,sqlite,google-maps,google-maps-markers,Java,Android,Sqlite,Google Maps,Google Maps Markers,当他们想在Google Maps marker上提供不同的名称和不同的标记图像时,我遇到了困难,我使用SQLite数据库存储来自标记的数据,我的项目中的以下代码: MaBase.java MainActivity.java 然后我会在地图形式的其他布局上调用不同的标记,但是如何在布局中输入数据以显示插入数据库的标记?以下布局将与标记地图一起输入: fragment_maps.xml 请帮忙,谢谢:) 长猫 02-12 02:15:33.851:E/AndroidRuntime(2489):致命异
02-12 02:15:33.851:E/AndroidRuntime(2489):致命异常:main
02-12 02:15:33.851:E/AndroidRuntime(2489):java.lang.RuntimeException:编译时无法启动活动组件信息{com.bongkorr/com.bongkorr.maps.MainActivity}:android.database.sqlite.SQLiteException:未知数据库marquer(代码1):,正在编译:CREATE TABLE marquer.db(ID整数主键自动递增,经度文本不为空,纬度文本不为空);
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.app.ActivityThread.access$600(ActivityThread.java:141)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.os.Handler.dispatchMessage(Handler.java:99)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.os.Looper.loop(Looper.java:137)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.app.ActivityThread.main(ActivityThread.java:5041)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-12 02:15:33.851:E/AndroidRuntime(2489):在java.lang.reflect.Method.invoke(Method.java:511)
02-12 02:15:33.851:E/AndroidRuntime(2489):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-12 02:15:33.851:E/AndroidRuntime(2489):在dalvik.system.NativeStart.main(本机方法)
02-12 02:15:33.851:E/AndroidRuntime(2489):原因:android.database.sqlite.SQLiteException:未知的数据库Marquer(代码1):,编译时:创建表Marquer.db(ID整数主键自动递增,经度文本不为NULL,纬度文本不为NULL);
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteConnection.acquiredPreparedStatement(SQLiteConnection.java:882)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.database.sqlite.SQLiteStatement.(SQLiteStatement.java:31)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1663)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于com.bongkorr.maps.MaBase.onCreate(MaBase.java:31)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于com.bongkorr.maps.MainActivity.sauver_point(MainActivity.java:86)
02-12 02:15:33.851:E/AndroidRuntime(2489):位于com.bongkorr.maps.MainActivity.onCreate(MainActivity.java:35)
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.app.Activity.performCreate(Activity.java:5104)上
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)上
02-12 02:15:33.851:E/AndroidRuntime(2489):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
我有两个想法
public void reloadMarkers() {
MaBase maBaseSQLite = new MaBase(MainActivity.this, NOM_BDD, null, 1);
SQLiteDatabase db = maBaseSQLite.getWritableDatabase();
Cursor c = db.query(TABLE_GEOPOINT, new String[] { COL_ID, COL_LONG,
COL_LAT }, null, null, null, null, null, null);
int col = c.getCount(); // col=0 pas de enregistrement qui verifie la
// condition
if (col == 0) {
Toast.makeText(MainActivity.this, "Pas de donnees ",
Toast.LENGTH_LONG).show();
// effacer le contenue champ login et mot de passe
} else {
map.clear(); //Delete all markers in map
//Add them all again, including the new ones
c.moveToFirst();
while (c.isAfterLast() == false) {
// conversion int to string casting
String id = "" + c.getInt(0);
String longitude = c.getString(1);
String latitude = c.getString(2);
Marker marqueur = map.addMarker(new MarkerOptions()
.position(
new LatLng(Double.parseDouble(latitude),
Double.parseDouble(longitude)))
.title("Bonjour Tunis")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.mark2)));
c.moveToNext();
}
}
c.close();
db.close();
}
void sauver_point() {
MaBase maBaseSQLite = new MaBase(MainActivity.this, NOM_BDD, null, 1);
SQLiteDatabase db = maBaseSQLite.getWritableDatabase();
ContentValues values = new ContentValues();
// values.put(COL_ID , "1");
values.put(COL_LAT, "36.830722");
values.put(COL_LONG, "10.165672");
long id = db.insert(TABLE_GEOPOINT, null, values); //Get the db id of the new inserted marker
//You can keep the id in an array and then query your database looking for those specific ids.
//The just add them to your map. Just don't clear the map his time! Or you will loose the old ones
db.close();
}
private static final String CREATE_BDD = "CREATE TABLE " + TABLE_MARK + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_LONG + " TEXT NOT NULL, " +COL_LAT+" TEXT NOT NULL, "+COL_NAME+" VARCHAR(250) NOT NULL, " +COL_IMAGE+" TEXT NOT NULL);";
然后,当您执行查询时,只需获取新的columns值
String id = "" + c.getInt(0);
String longitude = c.getString(1);
String latitude = c.getString(2);
String name = c.getString(3);
String iconEncoded = c.getString(4);
并将该值设置为标记名称和图标
Marker marqueur = map.addMarker(new MarkerOptions()
.position(
new LatLng(Double.parseDouble(latitude),
Double.parseDouble(longitude)))
.title(name)
.icon(iconDecoded);
重要的
请注意,iconEncoded
是一个字符串,标记图像是一个“位图描述符”,因此在将其设置为标记图标之前,首先需要将iconEncoded
转换为BitmapDescriptor
,并将该位图转换为BitmapDescriptor
。我希望您已经知道如何操作,如果不是的话,还有很多与此相关的帖子我相信你会找到去那里的路
另一件重要的事情是,在数据库中创建新列之前,您需要删除应用程序数据,否则您的应用程序将崩溃。最简单的方法是卸载应用程序并再次运行。这只需执行一次。您希望在哪种布局中显示数据?@kelvincer in MapsFragment,并连接我的MainActivityYou需要在activity_main中添加一个片段容器,然后生成片段transaction@kelvincer如何处理交易碎片?对不起,我很抱歉
public void reloadMarkers() {
MaBase maBaseSQLite = new MaBase(MainActivity.this, NOM_BDD, null, 1);
SQLiteDatabase db = maBaseSQLite.getWritableDatabase();
Cursor c = db.query(TABLE_GEOPOINT, new String[] { COL_ID, COL_LONG,
COL_LAT }, null, null, null, null, null, null);
int col = c.getCount(); // col=0 pas de enregistrement qui verifie la
// condition
if (col == 0) {
Toast.makeText(MainActivity.this, "Pas de donnees ",
Toast.LENGTH_LONG).show();
// effacer le contenue champ login et mot de passe
} else {
map.clear(); //Delete all markers in map
//Add them all again, including the new ones
c.moveToFirst();
while (c.isAfterLast() == false) {
// conversion int to string casting
String id = "" + c.getInt(0);
String longitude = c.getString(1);
String latitude = c.getString(2);
Marker marqueur = map.addMarker(new MarkerOptions()
.position(
new LatLng(Double.parseDouble(latitude),
Double.parseDouble(longitude)))
.title("Bonjour Tunis")
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.mark2)));
c.moveToNext();
}
}
c.close();
db.close();
}
void sauver_point() {
MaBase maBaseSQLite = new MaBase(MainActivity.this, NOM_BDD, null, 1);
SQLiteDatabase db = maBaseSQLite.getWritableDatabase();
ContentValues values = new ContentValues();
// values.put(COL_ID , "1");
values.put(COL_LAT, "36.830722");
values.put(COL_LONG, "10.165672");
long id = db.insert(TABLE_GEOPOINT, null, values); //Get the db id of the new inserted marker
//You can keep the id in an array and then query your database looking for those specific ids.
//The just add them to your map. Just don't clear the map his time! Or you will loose the old ones
db.close();
}
private static final String CREATE_BDD = "CREATE TABLE " + TABLE_MARK + " ("
+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_LONG + " TEXT NOT NULL, " +COL_LAT+" TEXT NOT NULL, "+COL_NAME+" VARCHAR(250) NOT NULL, " +COL_IMAGE+" TEXT NOT NULL);";
String id = "" + c.getInt(0);
String longitude = c.getString(1);
String latitude = c.getString(2);
String name = c.getString(3);
String iconEncoded = c.getString(4);
Marker marqueur = map.addMarker(new MarkerOptions()
.position(
new LatLng(Double.parseDouble(latitude),
Double.parseDouble(longitude)))
.title(name)
.icon(iconDecoded);