【发布时间】:2015-02-19 05:36:30
【问题描述】:
我有一个在地图中显示路线的 Android 应用,我从自己的 Web 服务以 JSON 格式接收数据,如下所示:
“可用”字段指示此路由是否仍处于活动状态 (true) 或否 (false)。我的代码如下:
如果路由处于活动状态,则需要创建或升级(如果仅存在)
if(json.getBoolean("available") == true)
{
synchronized(realm){
realm.beginTransaction();
Ruta ruta = realm.where(Ruta.class).equalTo("id", json.getLong("id")).findFirst();
//If doesn't exists we create a new route else I clear the coordinates to add news
if(ruta == null){
ruta = realm.createObject(Ruta.class); // Create a new object
}else{
ruta.getCoordenadas().clear();
}
ruta.setNombre(json.getString("name"));
ruta.setType_id(json.getInt("type_id"));
final JSONArray jsonCoordenadas = json.getJSONArray("coordinates");
for(int i = 0; i < jsonCoordenadas.length(); i++){
final JSONObject jsonCoordenada = jsonCoordenadas.getJSONObject(i);
Coordenada coordenadas = realm.createObject(Coordenada.class);
coordenadas.setLat(jsonCoordenada.getDouble("lat"));
coordenadas.setLon(jsonCoordenada.getDouble("lon"));
ruta.getCoordenadas().add(coordenadas);
}
realm.commitTransaction();
}
}
而且效果很好。
否则“可用” == false,是时候删除了。
else
{
synchronized(realm){
final Ruta ruta = realm.where(Ruta.class)
.equalTo("id", json.getLong("id"))
.findFirst();
if(ruta != null)
{
realm.beginTransaction();
if(ruta.getCoordenadas().size() > 0)
ruta.getCoordenadas().clear();
ruta.removeFromRealm();
realm.commitTransaction();
}
}
}
//If I create, update or delete I Save the last update Date of routes
synchronized(realm){
realm.beginTransaction();
change.setCod(changeBdd);
Log.e("changeBdd",changeBdd);
realm.commitTransaction();
}
这不起作用,如果我第一次这样做,REALM“删除”路线,但如果我在删除后第二次收到相同的 Json。 REALM 再次找到路线,但当试图摧毁粉碎应用程序时。
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.NullPointerException
at com.app.mapApp.ActivityPrincipal$CargaRutas.doInBackground(ActivityPrincipal.java:555)
at com.app.mapApp.ActivityPrincipal$CargaRutas.doInBackground(ActivityPrincipal.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
... 4 more
此外,所有这些都在 AsyncTask 内部,特别是在方法 doInBackground 中
private class CargaRutas extends AsyncTask<ItemRuta, ItemRuta, Boolean>{
@Override
protected Boolean doInBackground(ItemRuta... items) {
.
.
.
}
}
我不知道我该如何解决这个问题,有人帮我吗???我使用 REALM 0.76.0
【问题讨论】:
-
这个标题是什么意思?
-
好的,我改了标题