У меня есть Android приложение, которое показывает маршруты в карте, я получаю данные из моих собственных веб-сервисов в формате JSON как это:Realm получает NullPointerException при попытке удалить в Android
«Доступные» поля указывает если эти маршруты все еще активны (true) или нет (false). Мой код выглядит следующим образом:
Если маршрут активен, необходимо создать или uptade (если только существует)
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();
}
}
И работает отлично.
Else "available" == 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
Что означает это название? –
Хорошо, я изменил название –