sistema - sdk android nougat
WebView se cuelga cargando videos para Android 7.0 (0)
He estado investigando este tema durante algunos días y no he podido resolverlo. El problema que estoy teniendo con WebViews es que cuando cargo un video vimeo, se produce un error con este error:
java.lang.NullPointerException: Attempt to invoke virtual method ''int android.graphics.Bitmap.getWidth()'' on a null object reference
at com.android.webview.chromium.WebViewContentsClientAdapter.getDefaultVideoPoster(WebViewContentsClientAdapter.java:1181)
at org.chromium.android_webview.DefaultVideoPosterRequestHandler$1.run(DefaultVideoPosterRequestHandler.java:39)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Ahora, lo extraño es que esto está sucediendo en Anroid 7.0 y no en algo inferior a Android 4.4 (no tiene dispositivos físicos para 5.0 o 6.0 para probar).
Aquí está mi código que estoy ejecutando para renderizar el fragmento:
public class FragmentWebView extends Fragment{
protected WebView myWebView;
private String title, url, message;
private boolean isOffline;
View vWebView;
ViewFinder viewPullDowns;
SwipeRefreshLayout srlWebview;
protected void setTitle(String title) {
this.title = title;
}
protected void setUrl(String url) {
this.url = url;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
vWebView = inflater.inflate(R.layout.fragment_web_frame, container, false);
((MainActivity)getActivity()).setToClose();
((MainActivity)getActivity()).setTitle(title);
init();
return vWebView;
}
private void init() {
viewPullDowns = new ViewFinder((ViewGroup)vWebView, "pulldown");
srlWebview = (SwipeRefreshLayout) vWebView.findViewById(R.id.srl_fwf_webview);
if(message == null) {
message = "Unable to connect";
}
initWebView();
srlWebview.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if(url != null) {
myWebView.loadUrl(url);
}
}
});
}
private void initWebView() {
myWebView = (WebView) vWebView.findViewById(R.id.webview);
if(url != null) {
try {
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowContentAccess(true);
myWebView.setWebViewClient(new WebViewClient());
myWebView.loadUrl(url);
} catch (NullPointerException e) {
} catch (Exception e) {
}
}else{
initOffline();
}
}
protected void initOffline() {
myWebView.setBackgroundColor(getResources().getColor(R.color.colorTransparent));
viewPullDowns.setAllViewsVisibility(View.VISIBLE);
((MainActivity)getActivity()).showMessageOnBottom(message, R.color.colorError);
((MainActivity)getActivity()).hideSubmenu();
isOffline = true;
srlWebview.setRefreshing(false);
}
}
Este error ocurre ocasionalmente y si desinstalo mi aplicación, comenzará a funcionar nuevamente. Parece que WebView está almacenando en caché un objeto nulo y luego cargándolos (no está 100% seguro de eso). ¿Alguien más ha experimentado este problema antes o ha buscado en bibliotecas alternativas que admitan explorar la web dentro de un fragmento?