-1

これについて何百もの質問があることは知っていますが、これらすべての質問に対する答えを得る必要があります。

私のアプリケーションの概要 (私の質問ではありません): 多数のマーカー (関心のあるポイント) を作成するマップを持つアプリケーション。ユーザーがマーカーに足を踏み入れると、その場所に関する情報が表示されます。その情報は、場所のタイトル、SD カードからの画像を使用したスライドショー、一部の音声 (コントロール付き)、および短いテキストの説明で構成されます。


ここで私の大きな疑問は、このすべてのデータを自分のデバイスにダウンロードするための最良の方法を作成する必要があるということです!


PHP で作成された XML ファイルを使用して、すべてのデータベースをダウンロードすることを考えました。
なぜこれが思い通りにいかないと思うのか。
ユーザーにダウンロードしてもらいたい情報をフィルタリングする必要があります。

ユーザーは、ダウンロードしたい情報にチェックを入れるだけです。たとえば、情報があるいくつかの都市です。

このために、このようなダイアログを作成することを考えました

複数選択

ユーザーが必要な都市を選択した後、アプリケーションは選択した都市に従って情報を受け取る必要があります。

私はここで、これを行う最善の方法の答えを見つけようとしています。

私が持っているのは、次の構造を持つ MySQL データベースだけです。
id | name | radius | coords

関連付けられている都市に関する列を追加することで、ワークアウトになると思います。

情報データに関しては、次のフォルダー構造になります。
/sdcard/{app_name}/{id_of_the_point}/{.jpg/.mp3/.txt}

SD カードについては、このすべての情報を zip に圧縮し、それをデバイスにダウンロードして、SD カードのどこかに抽出することを考えました。

すべての情報を投稿するので、これを行うためのベストプラクティスを教えてください!

前もって感謝します!

4

2 に答える 2

2

たとえば、オーバーレイ クラスを拡張するクラスを使用する必要があります (注意してください、このコードは xml ではなく json を取得するためのものです)

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 に答える