tutorial studio okhttpclient android nullpointerexception singleton retrofit2

android - studio - Excepción del puntero nulo durante la instrucción ''monitor-enter v1''



retrofit2 java (2)

En Java, cada instancia de un tipo de referencia tiene su propio monitor asociado. El bloque sincronizado usa este monitor, bloqueándolo cuando un hilo entra y lo desbloquea cuando este mismo hilo lo abandona. Si pasa una referencia nula al bloque sincronizado, se llamará a la operación que intenta obtener el monitor asociado en una referencia nula que da como resultado una NullPointerException. Por lo tanto, no puede sincronizar en referencias nulas.

Es posible que ya vea que el código que está ejecutando trata de usar una referencia nula ("localDBUtility == null") para el bloque sincronizado que obviamente da como resultado un NPE.

Nota: Un monitor es una construcción de sincronización que se utiliza para implementar la exclusión mutua.

Me sale este error ahora cada vez
dentro del vacío público onResponse (llamada de llamada, respuesta de respuesta) { :

mContext.runOnUiThread(new Runnable() { @Override public void run() { LocalDBUtility local=LocalDBUtility.getInstance(); //code }

dentro de mi clase singleton LocalDBUtility

static LocalDBUtility localDBUtility; private LocalDBUtility(){ } public static LocalDBUtility getInstance(){ if(localDBUtility==null){ synchronized (localDBUtility) { localDBUtility = new LocalDBUtility(); } return localDBUtility; }else { return localDBUtility; } }

Quiero saber qué causó NPE?

Stack Trace:

java.lang.NullPointerException: Null pointer exception during instruction ''monitor-enter v1'' at com.utilities.LocalDBUtility.getInstance(LocalDBUtility.java:34) at com.MainActivity$4.run(MainActivity.java:386) at android.app.Activity.runOnUiThread(Activity.java:5506) at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5763) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755


if(localDBUtility==null){ synchronized (localDBUtility) {

Si localDBUtility es nulo, no puede llamar a sincronizar en él. Solo puede sincronizar en un objeto instanciado.