我使用以下方法在Google社区中保存了geopoint:
JSONObject obj=new JSONObject();
JSONArray jA=new JSONArray();
if(lx.size()==0){
Toast.makeText(ctx, "No location to upload now", Toast.LENGTH_LONG).show();
}
else{
for(int uq=0;uq<lx.size();uq++){
Double latit=lx.get(uq).getLatit();
Double longit=lx.get(uq).getLongit();
ParseGeoPoint pgPoint=new ParseGeoPoint(latit,longit);
jA.put(pgPoint);
}
try {
obj.put("locations",jA);
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
在此之后,我发送这个Jsonobject来解析云。
po.put("historyfile", obj);
po.saveInBackground(new SaveCallback() {
现在我试着用它来取回它:
JSONArray locations;
ParseGeoPoint
locations = obj.getJSONArray("locations");
for (int yx = 0; yx < locations.length(); yx++) {
pg =(ParseGeoPoint)locations.get(yx);
//draw this geopoint on googlemap
}
首先是在行:
pg =(ParseGeoPoint)locations.get(yx);
我得到了类型不匹配的错误。当我将它转换为解析对象然后它运行正常;但是当我试图运行apk时我得到了这个错误:
Caused by: java.lang.ClassCastException: org.json.JSONObject cannot be cast to com.parse.ParseGeoPoint
答案 0 :(得分:0)
尝试转到parse.com数据页并将您的JSONObject复制粘贴到jsonlint.com,然后您将在JSONObject中保存后确切看到pg
的样子。它本质上是一个可以视为JSONObject的字符串值,但是没有办法将String或JSONObject直接转换为ParseGeoPoint。
最好你可以潜入检索纬度/经度值:
JSONArray locations;
ParseGeoPoint
locations = obj.getJSONArray("locations");
for (int yx = 0; yx < locations.length(); yx++) {
pg = locations.getJSONObject(yx);
Double lat = pg.getDouble("latitude")
Double lon = pg.getDouble("longitude")
//draw this geopoint on googlemap
}
现在我没有尝试像你那样将ParseGeoPoint保存为JSONObject,所以不确定上面是否正确,只是一个例子。
如果您只需要能够存储和检索位置,那么您只需执行以下操作:
...
for(int uq=0;uq<lx.size();uq++){
Double latit=lx.get(uq).getLatit();
Double longit=lx.get(uq).getLongit();
JSONObject jsonPos = new JsonObject()
json.put("lat", latit);
json.put("lon", longit);
jA.put(jsonPos);
}
...
并且
JSONArray locations;
ParseGeoPoint
locations = obj.getJSONArray("locations");
for (int yx = 0; yx < locations.length(); yx++) {
pg =locations.getJSONObject(yx);
Double lat = pg.getDouble("lat")
Double lon = pg.getDouble("lon")
//draw this geopoint on googlemap
}