从Web服务器到设备获取关联的城市数据

时间:2012-05-30 10:00:22

标签: java php android mysql xml

我知道有数百个问题,但我需要回答所有这些问题。

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


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


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

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

为此,我考虑创建一个这样的对话框。
Multiple select

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

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

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

我认为通过添加一个与该城市相关联的列将进行锻炼。

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

对于SD卡,我压缩所有这些信息并考虑将其下载到设备并将其提取到SD卡中的某处。

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

提前致谢!

2 个答案:

答案 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获取与所选城市相关的所有数据。



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