【问题标题】:Store Google Maps markers in SharedPreferences将 Google 地图标记存储在 SharedPreferences 中
【发布时间】:2014-08-22 00:43:47
【问题描述】:

我正在尝试存储我的 GMaps 标记,因此当我按下返回按钮并再次返回到我的地图活动时,在屏幕上显示我的标记。

我查看了这篇 Save state when back button is pressed 的帖子并得到了一些结果,但我离最初的目标还很远。

现在我可以看到我的第一个标记和最后一个标记。

这是我的代码:

public class MapsActivity extends FragmentActivity {

    private GoogleMap mMap; // Might be null if Google Play services APK is not available.
    private List<Marker> markerList;

    public MapsActivity(){
        if(markerList == null){
            markerList = new ArrayList<Marker>();
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);

        setUpMapIfNeeded();

        LoadPreferences();
        Intent intent = getIntent();
        Bundle data = intent.getExtras();
        String label = data.getString("sum");
        int newLatitude = data.getInt("firstNumber");
        int newLongitude = data.getInt("secondNumber");

        MarkerOptions mo = new MarkerOptions().position(new LatLng(newLatitude, newLongitude)).title(label);
        markerList.add(mMap.addMarker(mo));
    }

    @Override
    protected void onResume() {
        super.onResume();
        setUpMapIfNeeded();
    }

    @Override
    public void onBackPressed(){
        super.onBackPressed();
        SavePreferences();
    }

    private void SavePreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("listSize", markerList.size());

        for(int i = 0; i <markerList.size(); i++){
            editor.putFloat("lat"+i, (float) markerList.get(0).getPosition().latitude);
            editor.putFloat("long"+i, (float) markerList.get(0).getPosition().longitude);
            editor.putString("title"+i, markerList.get(0).getTitle());
        }

        editor.commit(); 
    }

    private void LoadPreferences(){
        SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);

        int size = sharedPreferences.getInt("listSize", 0);
        for(int i = 0; i < size; i++){
            double lat = (double) sharedPreferences.getFloat("lat"+i,0);
            double longit = (double) sharedPreferences.getFloat("long"+i,0);
            String title = sharedPreferences.getString("title"+i,"NULL");

            markerList.add(mMap.addMarker(new MarkerOptions().position(new LatLng(lat, longit)).title(title)));
        }
    }
}

我的问题是如何存储我的标记,以便在我返回地图活动时显示它们? (使用这种或另一种方法)

【问题讨论】:

    标签: android google-maps android-activity google-maps-android-api-2


    【解决方案1】:

    标记标记; 现在这个标记对象不能直接存储到 sharedpreferences 中。我也面临同样的问题,经过大量研究,我得出这个结论,sharedpreferences 只能存储单个原始类型的数据,如 int、long、double、string 等或这些原始数据类型的集合,如 pojo(通过使用像 Gson 这样的库)。

    所以如果你想存储你的标记,你可以简单地以

    的形式获取它的位置

    双纬度=marker.getposition.latitude; double longitute=marker.getposition().longitude;

    然后将这些双精度值存储在共享首选项中。但是,如果您想将直接标记对象存储到共享首选项中的答案,那么我相信您不会在 stackoverflows 上找到任何答案,我进行了与此相关的所有研究。

    【讨论】:

      【解决方案2】:

      问题:

      markerList.get(0)
      

      您只是保存标记数组的第一个索引

      解决方案:

      从 fooloop 提供索引

      markerList.get(i)
      

      【讨论】:

      • 我真的很惭愧!这只是我的疏忽!对不起各位!
      • @guisantogui 有时会发生在我身上 :))
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2019-04-10
      • 2013-03-27
      • 1970-01-01
      • 2018-09-28
      • 2019-05-28
      相关资源
      最近更新 更多