Сбой Android WebView / WebViewClient с использованием эмулятора после просмотра с помощью loadUrl - PullRequest
0 голосов
/ 03 апреля 2012

Я использую WebViewClient для просмотра URL с помощью эмулятора. через некоторое время (не могу точно определить причину) страницы больше не могут быть загружены, или они просматривают навсегда, для тех же сайтов, что и раньше, были очень быстрыми. Обычно я вижу в onReceivedError ошибку -2 (WebViewClient.ERROR_HOST_LOOKUP) Любая помощь / ссылка будет оценена.

Спасибо!

W / ThrottleService (91): невозможно найти статистику для iface rmnet0
D / dalvikvm (171): GC_CONCURRENT освобожден 457K, 8% свободен 6971K / 7559K, приостановлен 11мс + 7мс
F / NetworkStats (91): проблема с чтением сетевой статистики
F / NetworkStats (91): java.lang.IllegalStateException: проблема с синтаксическим анализом idx 1
F / NetworkStats (91): на com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail (NetworkStatsFactory.java:300)
F / NetworkStats (91): на com.android.server.NetworkManagementService.getNetworkStatsUidDetail (NetworkManagementService.java:1282)
F / NetworkStats (91): на com.android.server.net.NetworkStatsService.performPollLocked (NetworkStatsService.java:831)
F / NetworkStats (91): на com.android.server.net.NetworkStatsService.performPoll (NetworkStatsService.java:799)
F / NetworkStats (91): на com.android.server.net.NetworkStatsService.access $ 100 (NetworkStatsService.java:128)
F / NetworkStats (91): на com.android.server.net.NetworkStatsService $ 3.onReceive (NetworkStatsService.java:633)
F / NetworkStats (91): atroid.app.LoadedApk $ ReceiverDispatcher $ Args.run (LoadedApk.java:728)
F / NetworkStats (91): на android.os.Handler.handleCallback (Handler.java:605)
F / NetworkStats (91): на android.os.Handler.dispatchMessage (Handler.java:92)
F / NetworkStats (91): на android.os.Looper.loop (Looper.java:137)
F / NetworkStats (91): на android.os.HandlerThread.run (HandlerThread.java:60)
F / NetworkStats (91): вызвано: java.io.FileNotFoundException: / proc / net / xt_qtaguid / stats: открыть не удалось: ENOENT (нет такого файла или каталога)
F / NetworkStats (91): at libcore.io.IoBridge.open (IoBridge.java:406)
F / NetworkStats (91): в java.io.FileInputStream. (FileInputStream.java:78)
F / NetworkStats (91): на com.android.internal.net.NetworkStatsFactory.readNetworkStatsDetail (NetworkStatsFactory.java:269)
F / NetworkStats (91): ... еще 10
F / NetworkStats (91): вызвано: libcore.io.ErrnoException: открыть не удалось: ENOENT (нет такого файла или каталога)
F / NetworkStats (91): at libcore.io.Posix.open (собственный метод)
F / NetworkStats (91): по адресу libcore.io.BlockGuardOs.open (BlockGuardOs.java:110)
F / NetworkStats (91): at libcore.io.IoBridge.open (IoBridge.java:390)
F / NetworkStats (91): ... еще 12
D / dalvikvm (91): GC_CONCURRENT освобожден 508K, 8% свободен 9025K / 9735K, приостановлено 6 мс + 24 мс
W / ThrottleService (91): невозможно найти статистику для iface rmnet0

1 Ответ

0 голосов
/ 04 апреля 2012

Используйте приведенный ниже рабочий код ::

public class Android_Activity extends Activity {
private Android_Activity _activity;
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);     
            getWindow().requestFeature(Window.FEATURE_PROGRESS);
            _activity = this;   
            setContentView(R.layout.main);

            mwebview=(WebView)view.findViewById(R.id.webview);
            mwebview.getSettings().setJavaScriptEnabled(true);
            mwebview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

            if(checkInternetConnection(_activity)==true){
                if(savedInstanceState==null)
                    mwebview.loadUrl("http://abc.com");
                else
                    mwebview.restoreState(savedInstanceState);
            }
            else{
                AlertDialog.Builder builder = new AlertDialog.Builder(_activity);
                builder.setMessage("Please check your network connection.")
                       .setCancelable(false)
                       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int id) {

                           }
                       });

                AlertDialog alert = builder.create();    
                alert.show();
            }
            mwebview.setWebChromeClient(new WebChromeClient() {

                @Override
                public void onProgressChanged(WebView view, int progress) { 
                    if(mwebview.getVisibility()==View.VISIBLE)
                    {
                        _activity.setProgress(progress * 100);
                    }
                }
            });
            mwebview.setWebViewClient(new HelloWebViewClient());
        }


        //HelloWebViewClient class for webview
        private class HelloWebViewClient extends WebViewClient {

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
            }
            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                // TODO Auto-generated method stub
                super.onReceivedError(view, errorCode, description, failingUrl);

            }
            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);
            }
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
                view.loadUrl(url);
                return true;
            }

        }   //HelloWebViewClient-class
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // Check if the key event was the Back button and if there's history
            if ((keyCode == KeyEvent.KEYCODE_BACK) && mwebview.canGoBack() ){
                mwebview.goBack();
                return true;
            }
            // If it wasn't the Back key or there's no web page history, bubble up to the default
            // system behavior (probably exit the activity)
            return super.onKeyDown(keyCode, event);
        }
        //To check whether network connection is available on device or not
            public static boolean checkInternetConnection(Activity _activity) {
                ConnectivityManager conMgr = (ConnectivityManager) _activity.getSystemService(Context.CONNECTIVITY_SERVICE);
                if (conMgr.getActiveNetworkInfo() != null
                        && conMgr.getActiveNetworkInfo().isAvailable()
                        && conMgr.getActiveNetworkInfo().isConnected()) 
                    return true;
                else
                    return false;
            }//checkInternetConnection()
}

А также в вашем макете main.xml вы должны иметь веб-просмотр с идентификатором webview

Затем замените строки ниже и попробуйте

 if(savedInstanceState==null)
                    mwebview.loadUrl("http://abc.com");
                else
                    mwebview.restoreState(savedInstanceState);

с .. mwebview.loadUrl ("http://abc.com");

...