Facebook комментарий в Webview Cra sh при нажатии кнопки фильтра - PullRequest
0 голосов
/ 23 января 2020

У меня есть комментарий от Facebook в моем приложении. Но в веб-обзоре Facebook есть кнопка sh, которая нажимает на каждую кнопку фильтра. это выглядит так:

enter image description here

На что консоль ответила:

01-23 11: 40: 51.733 32441-32441 / mobile. android .tribun E / AndroidRuntime: FATAL EXCEPTION: main Процесс: mobile. android .tribun, PID: 32441 android .content.res.Resources $ NotFoundException: идентификатор ресурса # 0x0 при android .content .res.Resources.getValue (Resources. java: 1351) в android .content.res.Resources.loadXmlResourceParser (Resources. java: 2774) в android .content.res.Resources.getLayout (Resources . java: 1165) в android .view.LayoutInflater.inflate (LayoutInflater. java: 421) в android .widget.ArrayAdapter.createViewFromResource (ArrayAdapter. java: 378) в android. widget.ArrayAdapter.getView (ArrayAdapter. java: 369) в org.chromium.content.browser.input.SelectPopupAdapter.getView (SelectPopupAdapter. java: 56) в android .widget.AbsListView.obtainView (AbsListView. java: 2346) в android .widget.ListView.measureHeightOfChildren (ListView. java: 1280) в android .widget.ListView.onMeasure (ListView. java: 11 88) в android .view.View.measure (просмотр. java: 18788) в android .view.ViewGroup.measureChildWithMargins (ViewGroup. java: 5951) в android .widget.FrameLayout.onMeasure (FrameLayout. java: 194) в android .view.View.measure (просмотр. java: 18788) в android .view.ViewGroup.measureChildWithMargins (ViewGroup. java: 5951) в android .widget.FrameLayout.onMeasure (FrameLayout. java: 194)

Я создал этот комментарий FB с этим фрагментом кода:

private void loadComments() {

        try {
            mWebViewComments.setWebViewClient(new UriWebViewClient());
            mWebViewComments.setWebChromeClient(new UriChromeClient());
            mWebViewComments.getSettings().setJavaScriptEnabled(true);
            mWebViewComments.getSettings().setAppCacheEnabled(true);
            mWebViewComments.getSettings().setDomStorageEnabled(true);
            mWebViewComments.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            mWebViewComments.getSettings().setSupportMultipleWindows(true);
            mWebViewComments.getSettings().setSupportZoom(false);
            mWebViewComments.getSettings().setBuiltInZoomControls(false);
            CookieManager.getInstance().setAcceptCookie(true);
            if (Build.VERSION.SDK_INT >= 21) {
                mWebViewComments.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
                CookieManager.getInstance().setAcceptThirdPartyCookies(mWebViewComments, true);
            }

            // facebook comment widget including the article url
            String html = "<!doctype html> <html lang=\"en\"> <head></head> <body> " +
                    "<div id=\"fb-root\"></div> " +
                    "<script async defer crossorigin=\"anonymous\" src=\"https://connect.facebook.net/id_ID/sdk.js#xfbml=1&version=v5.0&appId=" + getString(R.string.facebook_app_id) + "&autoLogAppEvents=1\"></script>"+
                    "<div class=\"fb-comments\" data-href=\"" + urlArticle + "\" " +
                    "data-numposts=\"" + NUMBER_OF_COMMENTS + "\" data-order-by=\"reverse_time\">" +
                    "</div> </body> </html>";

            mWebViewComments.loadDataWithBaseURL("https://m.facebook.com", html, "text/html", "UTF-8", null);
            mWebViewComments.setMinimumHeight(200);
        } catch (Exception e) {
            Toast.makeText(this, "Out of memory, please try later", Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }

    }


private class UriWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            String host = Uri.parse(url).getHost();
            return !host.equals("m.facebook.com");
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            String host = Uri.parse(url).getHost();
            //setLoading(false);
            if (url.contains("/plugins/close_popup.php?reload")) {
                final Handler handler = new Handler();
                handler.postDelayed(() -> {
                    //Do something after 100ms
                    containerFb.removeView(mWebviewPop);
                    loadComments();
                }, 600);
            }
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            //setLoading(false);
        }
    }


class UriChromeClient extends WebChromeClient {

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            mWebviewPop = new WebView(ReadActivity.this);
            mWebviewPop.setWebViewClient(new WebViewClient());
            mWebviewPop.setVerticalScrollBarEnabled(false);
            mWebviewPop.setHorizontalScrollBarEnabled(false);
            mWebviewPop.setWebViewClient(new UriWebViewClient());
            mWebviewPop.setWebChromeClient(this);
            mWebviewPop.getSettings().setJavaScriptEnabled(true);
            mWebviewPop.getSettings().setDomStorageEnabled(true);
            mWebviewPop.getSettings().setSupportZoom(false);
            mWebviewPop.getSettings().setBuiltInZoomControls(false);
            mWebviewPop.getSettings().setSupportMultipleWindows(true);
            mWebviewPop.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT));
            containerFb.addView(mWebviewPop);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(mWebviewPop);
            resultMsg.sendToTarget();

            return true;
        }

        @Override
        public boolean onConsoleMessage(ConsoleMessage cm) {
            Timber.i("onConsoleMessage: " + cm.message());
            return true;
        }

        @Override
        public void onCloseWindow(WebView window) {
        }
    }

Код работает нормально, и он отображает комментарий FB. Но Cra sh произойдет, когда я нажму кнопку фильтра в FB. Может ли кто-нибудь помочь мне справиться с этим крэ sh?

...