保存在DB中的值返回不同

时间:2016-01-14 18:44:48

标签: android sqlite google-maps google-maps-api-3

这是Google地图应用。 onLongClick()标记添加到两个列表中。一个只有LatLng用于将来保存sharedPrefferences,而另一个用于onDestroy()中的SQLite。问题是,当我将它放在地图上时,我从数据库中返回的LatLng比标记中的更短。这使我的信息活动无法打开。 这是我的方法:

@Override
public void onMapLongClick(LatLng latLng) {
    MarkerOptions markerOptions = new MarkerOptions().position(latLng);
    mMap.addMarker(markerOptions);
    markerOptions=getAddress(markerOptions);
    locations.add(latLng.latitude + ", " + latLng.longitude);
    databaseList.add(markerOptions);
}

从这里markerOptions对象转到List<MarkerOptions> databaseListonDestroy()中,列表转到DB:

public void insertList(List<MarkerOptions> list) {
    SQLiteDatabase db = getWritableDatabase();
    db.execSQL("DELETE FROM " + TABLE_LOCATIONS);
    for (MarkerOptions marker : list) {
        ContentValues values = new ContentValues();
        String[] split = marker.getTitle().split(", ");
        values.put(COLUMN_ADDRESS, split[0]);
        values.put(COLUMN_COUNTRY, split[1]);
        values.put(COLUMN_LAT, marker.getPosition().latitude);
        values.put(COLUMN_LNG, marker.getPosition().longitude);
        db.insertWithOnConflict(TABLE_LOCATIONS, null, values, SQLiteDatabase.CONFLICT_REPLACE);
        values.clear();
    }
    db.close();
}

然后在onCreate()中,我使用markerOptions填充相同的列表:

public class DatabaseProcessThread extends AsyncTask<List<MarkerOptions>,Void,List<MarkerOptions>>{


    @Override
    protected List<MarkerOptions> doInBackground(List<MarkerOptions>... params) {
        SQLiteHelper db = new SQLiteHelper(getApplicationContext(),null,null,1);
        return db.getExistingMarkers();
    }

    @Override
    protected void onPostExecute(List<MarkerOptions> markerOptionses) {
        super.onPostExecute(markerOptionses);
        databaseList=markerOptionses;
    }
}

问题是当我用4个标记测试它时,重新启动应用程序并在地图上再放一个,旧的4没有打开因为它们没有通过if

 @Override
public boolean onMarkerClick(Marker marker) {

    for (MarkerOptions options : databaseList) {
        if (options.getPosition().latitude==marker.getPosition().latitude&&options.getPosition().longitude==marker.getPosition().longitude){
            Intent intent = new Intent(this,com.example.fixxxer.map.MarkerActivity.class);
            Log.v(TAG,options.getPosition().toString());
            String[]split = options.getTitle().split(", ");
            intent.putExtra("Address",split[0]);
            intent.putExtra("Country",split[1]);
            intent.putExtra("Latitude",marker.getPosition().latitude);
            intent.putExtra("Longitude",marker.getPosition().longitude);
            Toast.makeText(MapsActivity.this,split[0]+","+split[1], Toast.LENGTH_SHORT).show();
            startActivity(intent);
        }else{
            Log.v(TAG,options.getPosition().toString());
        }
    }
    return true;
}

这就是我获取markerOptions

的方式
public List<MarkerOptions> getExistingMarkers() {

    ArrayList<MarkerOptions> list = new ArrayList<>();
    String query = "SELECT * FROM " + TABLE_LOCATIONS;
    Cursor curs = null;SQLiteDatabase db = null;
    try {
        db = getReadableDatabase();
        curs = db.rawQuery(query, null);
        curs.moveToFirst();
        if (curs.isFirst()) {
            do {
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.title(curs.getString(1) + ", " + curs.getString(2));
                LatLng latlng = new LatLng(Double.valueOf(curs.getString(3)), Double.valueOf(curs.getString(4)));
                markerOptions.position(latlng);
                list.add(markerOptions);
                curs.moveToNext();
            } while (!curs.isAfterLast());
        }
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
    curs.close();
    db.close();
    return list;
}
返回的所有5个位置

Log.v 01-14 13:21:17.859 7841-7841/com.example.fixxxer.map V/MAPS ACTIVITY: lat/lng: (-16.9619,20.079) 01-14 13:21:17.859 7841-7841/com.example.fixxxer.map V/MAPS ACTIVITY: lat/lng: (-25.4685,23.4743) 01-14 13:21:17.859 7841-7841/com.example.fixxxer.map V/MAPS ACTIVITY: lat/lng: (1.3249,12.0056) 01-14 13:21:17.859 7841-7841/com.example.fixxxer.map V/MAPS ACTIVITY: lat/lng: (-29.0083,24.7622) 01-14 13:21:17.859 7841-7841/com.example.fixxxer.map V/MAPS ACTIVITY: lat/lng: (-4.444019301843549,27.22086824476719) 我做错了什么?

1 个答案:

答案 0 :(得分:0)

我猜你会在数据库列表和位置列表中保存不同的值:

markerOptions=getAddress(markerOptions);

可能known user会导致数据库中的位置值与地图上的实际标记不同。