A veces lanza Error no detectado: método de llamada de error en NPObject en Android

Tengo problemas con la Webview en Android y es JavascriptInterfaces.

Estoy pasando una cadena a JavascriptInterface. Al depurarlo, recibo la cadena correcta dentro de mi aplicación de Android. El problema: A veces tengo un error no detectado: Error al llamar al método en NPObject.

¿Alguien sabe por qué?

La interfaz en Java:

public class JSInterfaceGame extends JSInterface { @JavascriptInterface public void setShareText(String share){ shareText = share; if(mJSInterfaceListener != null) mJSInterfaceListener.onParametersChanged(SHARE_TEXT); } 

La inicialización en el método onCreateView dentro del fragmento:

 online = (WebView) rootView.findViewById(R.id.online); online.setWebViewClient(new WISWebviewClient() { @Override public void onStatusChanged(final WebView view, int progress, long duration) { //unrelated } }); WebSettings ws = online.getSettings(); ws.setJavaScriptEnabled(true); ws.setUserAgentString(USER_AGENT); ws.setCacheMode(WebSettings.LOAD_DEFAULT); ws.setRenderPriority(WebSettings.RenderPriority.HIGH); SharedPreferences settings = getActivity().getSharedPreferences(GameActivity.PREFERENCES, Context.MODE_PRIVATE); mJSInterface = new JSInterfaceGame(); mJSInterface.setJSInterfaceListener(this); // Defined elsewhere in this class. mJSInterface.setPlayerName(settings.getString(GameActivity.PREFS_PlAYERNAME, null)); online.addJavascriptInterface(mJSInterface, "JSInterface"); online.loadUrl("http://myurl.something"); 

Llame en Javascript:

 function makeShareText() { var text = "Some text"; console.log(typeof text); // Always a string. JSInterface.setShareText(text); } 

Sucede cuando se intenta, utilizando el método llamado desde la interfaz javascript, para interactuar con la interfaz de usuario. Para solucionarlo de esta manera:

 class mJSInterface() { public void myFunction() { runOnUiThread(new Runnable() { public void run() { //Code that interact with UI } }); } } 

Para resaltar el comentario de @Leog

El mismo error ocurre si llama a la función javascript nativa con parámetros incorrectos

Esta fue la fuente de mi error

Otra razón puede ser una RuntimeException en un WebViewCoreThread . Cualquier excepción que se @JavascriptInterface después de recibir la llamada @JavascriptInterface se registrará como error NPObject si todavía se ejecuta en un hilo WebView. Mensaje de rastreo global insuficiente con poca pista sobre el problema.

Corrija su problema con el manejo de la llamada de interfaz javascript en un hilo adecuado.

Ejemplo A. (error NPObject):

 @JavascriptInterface public void jsCall() { Log.v(TAG, "Prepared NullPointerException on "+Thread.currentThread()); String s = null; s.length(); // This will cause NPObject error } 

Ejemplo B. (NullPointerException):

 @JavascriptInterface public void jsCall() { new Thread(new Runnable() { @Override public void run() { Log.v(TAG, "Prepared NullPointerException on " + Thread.currentThread()); String s = null; s.length(); // This will throw NullPointerException } }).start(); } 

Tome esto como una adición a la respuesta @ Nico.S.

Operar iframe en Android 4.4 WebView puede causar una excepción similar (Uncaught ReferenceError: NPObject eliminado), finalmente descubro la solución:

 @Override public void onPageFinished(final WebView view, String finishUrl) { super.onPageFinished(view, finishUrl); // android 4.4 may lost value of 'Android' when operating iframe view.addJavascriptInterface(Activity.this, "Android"); } 
  • Presentación de hardware WebView de Android Problema de artefacto extraño
  • Navegador para Android WebView VS
  • Webview no puede aceptar cookies
  • Matanzas de Kitkat: No se permite cargar un recurso local: file: ///android_asset/webkit/android-weberror.png
  • Método restorePicture de WebView - Impedir que la vista web vuelva a cargar la página
  • Preloading página web en Android (usando WebView?)
  • Opción de pantalla completa no disponible al cargar video de YouTube en WebView
  • Android WebView: muestra sólo una parte del sitio web
  • Android ViewPager guardar página anterior en onPageSelected
  • Agente de usuario de WebView
  • Utilizar folleto en una aplicación de Android para mostrar el mapa en línea
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.