无法将JSONObject强制转换为com.parse.ParseGeoPoint

时间:2015-04-26 06:55:42

标签: android json parse-platform

我使用以下方法在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

1 个答案:

答案 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
}