Objeto no bloqueado por subproceso antes de notificar () en onPostExecute

Intento notificar los adaptadores de los listviews de la clase principal en onPostExecute pero recibo el error: java.lang.IllegalMonitorStateException: objeto no bloqueado por el hilo de rosca antes de notify ()

@Override protected void onPostExecute(String result) { popularfragment.adapter.notifyDataSetChanged(); recentfragment.adapter.notifyDataSetChanged(); } 

El método .notify() tiene que ser llamado desde dentro de un contexto synchronized , es decir desde dentro de un bloque synchronized .

La .notify() java.lang.IllegalMonitorStateException se .notify() cuando llama a .notify() en un objeto que no se utiliza como bloqueo para el bloque sincronizado en el que llama notificar. Por ejemplo, los siguientes trabajos;

 synchronized(obj){ obj.notify(); } 

Pero esto arrojará la excepción;

 synchronized(obj){ // notify() is being called here when the thread and // synchronized block does not own the lock on the object. anotherObj.notify(); } 

Referencia;

  • IllegalMonitorStateException API
  • Cómo usar wait & notify

Tuve el mismo error, pero (para mí) la respuesta sugerida por Rudi Kershaw no era el problema … Llamé la notify() de una notificación de la manera incorrecta (vea la última línea de ambos fragmentos):

No funciona:

 public void update() { mBuilder.setSmallIcon(R.drawable.ic_launcher) .setPriority(AesPrefs.getInt(R.string.PRIORITY_NOTIFICATION_BATTERY, NotificationCompat.PRIORITY_MAX)) .setOngoing(true); mBuilder.setWhen(AesPrefs.getLong(Loader.gStr(R.string.LAST_FIRED_BATTERY_NOTIFICATION) + Const.START_CLIPBOARD_NOTIFICATION_DELAYED, -1)); mManager.notify(); // <- lil' mistake } 

Trabajando:

 public void update() { mBuilder.setSmallIcon(R.drawable.ic_launcher) .setPriority(AesPrefs.getInt(R.string.PRIORITY_NOTIFICATION_BATTERY, NotificationCompat.PRIORITY_MAX)) .setOngoing(true); mBuilder.setWhen(AesPrefs.getLong(Loader.gStr(R.string.LAST_FIRED_BATTERY_NOTIFICATION) + Const.START_CLIPBOARD_NOTIFICATION_DELAYED, -1)); mManager.notify(Const.NOTIFICATION_CLIPBOARD, mBuilder.build()); // <- ok ;-) } 
  • detectando la conexión a internet en android
  • Android: forma estándar de hacer correr un hilo cada segundo
  • Llamada Hilo principal de hilo secundario en Java / Android
  • ¿Cómo funciona maximumPoolSize de ThreadPoolExecutor?
  • Múltiples AudioTracks, Single Thread o Multiple?
  • ¿Qué biblioteca de tareas prioritarias de Android (Asynk Task, Multithreading) recomendaría para Android?
  • ¿Hay una manera de pasar parámetros a un Runnable?
  • Cómo llamar a otra actividad después de cierto límite de tiempo
  • ¿Hay RxJava equivalente a Handler.postDelayed (Runnable r, delayMillis largo)
  • No se puede finalizar una actividad en pausa hasta que se recupera el foco
  • Cómo setText de un hilo independiente en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.