将Google地图标记存储在SharedPreferences中

时间:2014-08-22 00:43:48

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

我正在尝试存储我的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)));
        }
    }
}

我的问题是,当我回到地图活动时,我如何存储我的标记? (使用这种或其他方法)

2 个答案:

答案 0 :(得分:0)

<强>问题:

markerList.get(0)

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

<强>溶液

从foorloop

提供索引
markerList.get(i)

答案 1 :(得分:0)

标记标记;  现在,此标记对象无法直接存储到共享首选项中。我也遇到了同样的问题,经过大量研究后我得出这样的结论:共享偏好只能存储单个基本类型的数据,如int,long,double,string等,或者这些原始数据类型的集合,如pojo(通过使用像Gson这样的库) )。

因此,如果您想存储标记,只需以

的形式获取其位置即可

double latitute = marker.getposition.latitude; double longitute = marker.getposition()。longitude;

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