我知道有数百个问题,但我需要回答所有这些问题。
我的申请摘要(不是我的问题):
具有地图的应用程序,其中创建了许多标记(兴趣点)。当用户走进标记时,它会触发有关该位置的信息。该信息包括地点的标题,使用来自SD卡的图像的幻灯片,一些音频(带有控件)和一个小文本描述。
现在我的大问题是:我需要创建将所有这些数据下载到我的设备的最佳方式!
我想过使用PHP创建的XML文件下载所有数据库
为什么我认为这不会按照我想要的方式运作
我需要过滤我希望用户下载的信息。
那么,用户只需要勾选他想要下载的信息,例如几个有信息的城市。
为此,我考虑创建一个这样的对话框。
用户选择他想要的城市后,应用程序必须根据所选城市接收信息。
我在这里试图找到最佳方法的答案。
我所拥有的是一个具有以下结构的MySQL数据库:
id | name | radius | coords
我认为通过添加一个与该城市相关联的列将进行锻炼。
关于信息数据,它将具有以下文件夹结构:
/sdcard/{app_name}/{id_of_the_point}/{.jpg/.mp3/.txt}
对于SD卡,我压缩所有这些信息并考虑将其下载到设备并将其提取到SD卡中的某处。
发布所有信息,我需要你们给我这样做的最佳做法!
提前致谢!
答案 0 :(得分:2)
``你需要使用扩展覆盖类的类,例如(注意,这段代码用于获取json而不是xml)
public class LocationOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>();
Context context;
public LocationOverlay(Drawable marker, Context c) {
super(boundCenterBottom(marker));
// TODO Auto-generated constructor stub
populate();
context = c;
}
@Override
protected boolean onTap(int index) {
Toast.makeText(context,
"Touch on marker: \n" + overlayItemList.get(index).getTitle(),
Toast.LENGTH_LONG).show();
// code for passing storeid's
OverlayItem item = overlayItemList.get(index);
String idex = (item.getTitle());
Intent idtent = new Intent(context, StoreDetails.class);
idtent.putExtra("&", idex);
context.startActivity(idtent);
return true;
}
public void addItem(GeoPoint p, String title) {
OverlayItem newItem = new OverlayItem(p, title, null);
overlayItemList.add(newItem);
populate();
}
@Override
protected OverlayItem createItem(int i) {
// TODO Auto-generated method stub
return overlayItemList.get(i);
}
@Override
public int size() {
// TODO Auto-generated method stub
return overlayItemList.size();
}
现在只是在显示地图的班级中,执行此操作
Double jlat = j4.getDouble("Latitude");
Double jlon = j4.getDouble("Longitude");
Log.v("Latitude", jlat + "n");
Log.v("Longitude", jlon + "n");
// Get the distance between lat long
Location locationA = new Location("point A");
locationA.setLatitude(slat);
locationA.setLongitude(slon);
Location locationB = new Location("point B");
locationB.setLatitude(jlat);
locationB.setLongitude(jlon);
distance = (int) locationA.distanceTo(locationB);
String str = " (" + String.valueOf(distance) + " meters)";
Log.v("Distance", str);
// adjust drawable params
Drawable marker = getResources().getDrawable(
android.R.drawable.star_big_on);
Drawable user = getResources().getDrawable(
android.R.drawable.arrow_down_float);
int userWidth = user.getIntrinsicWidth();
int userHeight = user.getIntrinsicHeight();
user.setBounds(0, userHeight, userWidth, 0);
int markerWidth = marker.getIntrinsicWidth();
int markerHeight = marker.getIntrinsicHeight();
marker.setBounds(0, markerHeight, markerWidth, 0);
// refernc to overlay class
LocationOverlay myItemizedOverlay = new LocationOverlay(
marker, MapActivity.this);
LocationOverlay myItemizedOverlay1 = new LocationOverlay(
user, MapActivity.this);
mapView.getOverlays().add(myItemizedOverlay);
mapView.getOverlays().add(myItemizedOverlay1);
// create geopoint for user
GeoPoint usr = new GeoPoint((int) (slat * 1e6),
(int) (slon * 1e6));
// add overlay(user) to user's location
myItemizedOverlay1.addItem(usr, "User");
mc.animateTo(usr);
并且在上面的类中,只要用户点击一个地理位置,你就可以添加任何类型的处理程序。
答案 1 :(得分:-1)
到目前为止,我还没有参与这个项目。
因此,经过所有研究,我找到了最佳方法。
我使用了JSON:)
首先,使用json数据填充多选对话框(处理它)
其次,在选择后,使用json获取与所选城市相关的所有数据。
而我的问题现在已经消失了! :)