-1

我正在保存 LatLng 坐标。方法如下所示:

@Override
protected void onPause() {
    markerList.clear();
    sharedPreferences=getPreferences(Context.MODE_PRIVATE);
    editor=sharedPreferences.edit();
    key =0;
    for (LatLng latlng:markerList){
        double lat = latlng.latitude;
        double lng = latlng.longitude;
        editor.putString("key"+key,lat+","+lng);
        key++;
    }
    editor.putInt("id",key);
    editor.apply();

    super.onPause();
}

当我尝试获取字符串并解析为双倍时:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    markerList = new ArrayList<>();
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    sharedPreferences=getPreferences(Context.MODE_PRIVATE);
    try{
        key = sharedPreferences.getInt("id",0);
        for (int i =0;i<=key;i++){
            if (sharedPreferences!=null){
                String toSplit = sharedPreferences.getString("key"+i, null);
                String[] split = toSplit.split(",");
                double lat = Double.parseDouble(split[0]);
                double lng = Double.parseDouble(split[1]);
                LatLng latLng = new LatLng(lat,lng);
                markerList.add(latLng);


            }

        }
    }catch (NullPointerException e){
        e.printStackTrace();
    }catch (NumberFormatException n){
        n.printStackTrace();
    }

我得到:

java.lang.NumberFormatException: Invalid double: "lat/lng: (13.182902096722074"

在这一行:

double lat = Double.parseDouble(split[0]);

我已经检查了 1000 次代码,我觉得一切正常吗?我错过了什么?

4

2 回答 2

1

保存这些数字时,您没有使用良好的格式。(或者至少从您的 logcat 中看起来像)。

我相信您想要,并且正在尝试保存以下内容:

"13.182902096722074,14.182902096722074"

但相反,你有这样的格式:

"lat/lng: (13.182902096722074,14.182902096722074)"

当您将"lat/lng:数据保存在SharedPreferences.


编辑:根据您的回答。看来您之前保存了该格式的首选项,后来更改了代码。但是要么忘记重新运行你的代码,要么你正在阅读一个旧SharedPreferences文件。

于 2015-12-18T15:13:41.273 回答
0

从错误消息来看,您阅读的格式似乎与当前保存的格式不同。您之前是否以“lat/lng: (lat,lng)”格式而不是当前格式“lat,lng”保存数据?如果是这样,您需要清除该数据。

于 2015-12-18T15:14:29.440 回答