-1

我知道有数百个关于此的问题,但我需要得到所有这些问题的答案。

我的应用程序摘要(不是我的问题): 一个应用程序,它有一个地图,它创建了许多标记(兴趣点)。当用户走进标记时,它会触发有关该地点的信息。该信息包括地点的标题、使用 sdcard 中的图像的幻灯片、一些音频(带控件)和一个小文本描述。


现在我的大问题是:我需要创建将所有这些数据下载到我的设备的最佳方式!


我想过使用 PHP 创建的 XML 文件下载所有数据库。
为什么我认为这不会按我想要的方式工作。
我需要过滤我希望用户下载的信息。

好吧,用户只需要勾选他想要下载的信息,例如几个有信息的城市。

为此,我想创建一个这样的对话框

多选

用户选择想要的城市后,应用程序必须根据选择的城市接收信息。

我在这里试图找到最佳方法的答案。

我所拥有的只是一个具有以下结构的 MySQL 数据库:
id | name | radius | coords

我认为通过添加有关与其相关的城市的列将锻炼。

关于信息数据,它将具有以下文件夹结构:
/sdcard/{app_name}/{id_of_the_point}/{.jpg/.mp3/.txt}

对于 sdcard,我将所有这些信息压缩在一个 zip 中,并考虑将其下载到设备上并将其提取到 sdcard 中的某个位置。

发布所有信息,我需要你们给我这样做的最佳实践!

提前致谢!

4

2 回答 2

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);

并且在上面的类中,您可以在用户点击地理点时添加任何类型的处理程序..

于 2012-05-31T11:11:00.520 回答
-1

到目前为止,我还没有从事过这个项目。

所以经过所有的研究,我找到了最好的方法。

我使用 JSON :)

首先,使用 json 数据填充多选对话框(处理它)
其次,选择后,使用 json,获取与所选城市关联的所有数据。



我的问题现在消失了!:)

于 2012-07-11T14:30:48.897 回答