6

Android Google Maps v2 APIを使用しており、ロングクリックでマーカーを追加するように設定しています。これらのマーカーを保存して、アプリが再開したときにリロードする方法が必要です。これを行うための最良の方法は何でしょうか?助けてください

現在、次のようにマーカーを追加しています。

map.addMarker(new MarkerOptions().position(latlonpoint)
            .icon(bitmapDescriptor).title(latlonpoint.toString()));
4

3 に答える 3

6

わかった!ポイントの配列リストをファイルに保存し、ファイルから読み戻すことで、これを簡単に行うことができます

私は次のことをしますonPause

try {
    // Modes: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE
    FileOutputStream output = openFileOutput("latlngpoints.txt",
    Context.MODE_PRIVATE);
    DataOutputStream dout = new DataOutputStream(output);
    dout.writeInt(listOfPoints.size()); // Save line count
    for (LatLng point : listOfPoints) {
        dout.writeUTF(point.latitude + "," + point.longitude);
        Log.v("write", point.latitude + "," + point.longitude);
    }
    dout.flush(); // Flush stream ...
    dout.close(); // ... and close.
} catch (IOException exc) {
    exc.printStackTrace();
}

そしてonResume:私は反対のことをします

try {
    FileInputStream input = openFileInput("latlngpoints.txt");
    DataInputStream din = new DataInputStream(input);
    int sz = din.readInt(); // Read line count
    for (int i = 0; i < sz; i++) {
        String str = din.readUTF();
        Log.v("read", str);
        String[] stringArray = str.split(",");
        double latitude = Double.parseDouble(stringArray[0]);
        double longitude = Double.parseDouble(stringArray[1]);
        listOfPoints.add(new LatLng(latitude, longitude));
    }
    din.close();
    loadMarkers(listOfPoints);
} catch (IOException exc) {
    exc.printStackTrace();
}
于 2013-01-24T22:24:40.537 に答える
0

onLongClickListener以下のようにマーカーのを実装できます。

map.addMarker(new MarkerOptions()
    .position(latlonpoint)
    .icon(bitmapDescriptor)
    .title(latlonpoint.toString()));
map.setOnMapLongClickListener(new OnMapLongClickListener() {
    @Override
    public void onMapLongClick(LatLng p_point) {
        // TODO ...
    }
});
于 2013-01-24T04:57:23.820 に答える
0

まず、データベースを長押しして緯度と経度を保存します

注:-その必要のない場所は無視してください

 HistoryModel historyModel = new HistoryModel(place,sLatitude, sLongitude);
 DatabaseMethods.openDB(MapsActivity.this);
 DatabaseMethods.addHistory(historyModel);
 DatabaseMethods.closeDB();

onMapReadyコールバックで

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

    DatabaseFunctions.openDB(MapsActivity.this);
    ArrayList<HistoryModel> historyModelArr = DatabaseFunctions.getHistory();
    DatabaseFunctions.closeDB();

    for (int i = 0; i < historyModelArr.size(); i++) {
        double latitude = Double.parseDouble(historyModelArr.get(i).getLatitude());
        double longitude = Double.parseDouble(historyModelArr.get(i).getLongitude());
        mMap.addMarker(new MarkerOptions()
                .position(new LatLng(latitude, longitude)));
    }
}

使用される方法:-

   public static ArrayList<HistoryModel> getHistory() {
    Cursor cursor = null;
    ArrayList<HistoryModel> historyModelArr = null;
    try {
        cursor = db.rawQuery("SELECT * FROM " + DBHelper.TABLE_HISTORY,
                null);

        if (cursor != null) {
            historyModelArr = new ArrayList<HistoryModel>();
            while (cursor.moveToNext()) {
                HistoryModel historyModel = new HistoryModel(cursor.getString(1),cursor.getString(2), cursor.getString(3));
                historyModelArr.add(historyModel);
            }
            return historyModelArr;
        } else {
            return historyModelArr;
        }

    } catch (Exception e) {
        Log.e(tag, "getHistory Error : " + e.toString());
        return historyModelArr;
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}



public static void addHistory(HistoryModel historyModel) {

    ContentValues values;
    try {
        values = new ContentValues();
        values.put(DBHelper.HISTORY_PLACE, historyModel.getPlace());
        values.put(DBHelper.HISTORY_LATITUDE, historyModel.getLatitude());
        values.put(DBHelper.HISTORY_LONGITUDE, historyModel.getLongitude());
        db.insert(DBHelper.TABLE_HISTORY, null, values);
    } catch (Exception e) {
       
    }

}

モデルクラス

public class HistoryModel {

private String place, latitude, longitude;

public HistoryModel(String place, String latitude, String longitude) {
    this.place = place;
    this.latitude = latitude;
    this.longitude = longitude;
}


public String getPlace() {
    return place;
}

public void setPlace(String place) {
    this.place = place;
}

public String getLatitude() {
    return latitude;
}

public void setLatitude(String latitude) {
    this.latitude = latitude;
}

public String getLongitude() {
    return longitude;
}

public void setLongitude(String longitude) {
    this.longitude = longitude;
}
}
于 2021-10-01T13:45:23.913 に答える