Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android google maps v2上保存标记_Android_Google Maps_Google Maps Markers_Android Maps_Savestate - Fatal编程技术网

在Android google maps v2上保存标记

在Android google maps v2上保存标记,android,google-maps,google-maps-markers,android-maps,savestate,Android,Google Maps,Google Maps Markers,Android Maps,Savestate,我正在使用Android Google maps v2 API,并将其设置为在长时间单击时添加标记。我需要一种方法来保存这些标记,并在应用程序再次恢复时重新加载它们。最好的方法是什么?请帮忙 目前,我添加了如下标记: map.addMarker(new MarkerOptions().position(latlonpoint) .icon(bitmapDescriptor).title(latlonpoint.toString())); 您可以为标记实现onLongCl

我正在使用Android Google maps v2 API,并将其设置为在长时间单击时添加标记。我需要一种方法来保存这些标记,并在应用程序再次恢复时重新加载它们。最好的方法是什么?请帮忙

目前,我添加了如下标记:

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

您可以为标记实现
onLongClickListener
,如下所示:

map.addMarker(new MarkerOptions()
    .position(latlonpoint)
    .icon(bitmapDescriptor)
    .title(latlonpoint.toString()));
map.setOnMapLongClickListener(new OnMapLongClickListener() {
    @Override
    public void onMapLongClick(LatLng p_point) {
        // TODO ...
    }
});

我明白了!我可以通过将点的数组列表保存到一个文件中,然后从文件中读取它们来轻松完成这项工作

我在暂停时执行以下操作:

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();
}
和恢复时的
:我做的正好相反

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();
}
试试看{
FileInputStream输入=openFileInput(“latlngpoints.txt”);
DataInputStream din=新的DataInputStream(输入);
int sz=din.readInt();//读取行计数
对于(int i=0;i
我认为你没有正确理解这个问题。我需要一种方法来保存和重新加载我添加的标记。也就是说,当退出应用程序时,它应该保存所有当前标记,并在应用程序再次恢复时重新加载它们。实现onLongClickListener有什么帮助?@CrashOverride…上面Grishu的回答是让您知道如何使用ClickListener的正确编写代码。他的答案是我们必须知道的基本公式,以便将onClickListener应用于代码。我想就这些。@BBonDoo-我完全同意你的看法。你是对的。谢谢。我只为onLongClickListener提供了解决方案。是的,我知道这是实现onLongClickListener的代码。谢谢你,但这不是我需要或要求的。无论如何,我不想太多地回避这个话题。不过还是谢谢你!我想保存标记。我假设只将标记位置(lat/long值)保存在某个地方(我不知道在哪里以及如何保存)。我明白了。您想要的是,在屏幕中设置标记后,您(或用户)离开屏幕并转到B屏幕,然后当您再次从B屏幕返回到屏幕时,您希望看到屏幕的状态。对,对。那完全正确。不仅仅是应用程序的不同屏幕。但当应用程序退出时,你也会像第二天一样重新访问该应用程序。我应该能找回旧的马克笔。实际上,我找到了一个解决方案,我把自己贴在下面。但如果你有更好的解决办法,我洗耳恭听!啊哈,现在我明白你说的了:不是继续,而是在你的应用程序完全销毁后随时“重启”你的应用程序。在这种情况下,您在下面写的看起来是正确的。还有,我认为你的代码是一个很好的试用版,但我认为你最好使用活动的生命周期,根据Android开发指南,这是一种非常简单的方法。考虑我想这就是你想要做的,我稍微研究了一下,但onSaveInstanceState似乎是一个临时解决方案。它不会更永久地存储数据。啊哈,现在我明白你说的了:不要恢复,而是在你的应用程序完全销毁后随时“重启”你的应用程序。在这种情况下,您上面写的看起来是正确的。更多信息,.@lincolnWhite我不必创建任何新的文本文件。代码负责创建文本文件。我不再有访问代码库的权限。。。这是我参与的一个老项目。但我认为loadMarkers应该遍历标记列表,并将标记添加到地图中,如下所示
map.addMarker(新标记选项().position(latlonpoint).icon(bitmapDescriptor).title(latlonpoint.toString())对我来说,这比共享引用或数据库要好得多。代码不错,伙计。