15

Я использую WebView для загрузки веб-сайта. Но он очень медленный и протекает при загрузке определенных веб-сайтов. Я загружаю WebView со следующим кодом.WebView не загружает веб-страницу

@Override 
    protected void onNewIntent(Intent intent) { 
     if (intent.getStringExtra("url") != null) { 
      webView.loadurl(intent.getStringExtra("url")); 

      } 
    } 

Но я звоню webView.loadUrl(Config.URL); (Config.URL может содержать тот же URL, как указано выше) в onCreate() метод после инициализации WebView со следующим.

 this.webView = (WebView) findViewById(R.id.wv); 
     this.webView.getSettings().setJavaScriptEnabled(true); 
     this.webView.getSettings().setLoadsImagesAutomatically(true); 
     this.webView.getSettings().setDomStorageEnabled(true); 
     this.webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 
     MyClient client = new MyClient(WebActivity.this, (ProgressBar)findViewById(R.id.progressBar)); 
     webView.setWebViewClient(client); 

Загрузка из onCreate() работает нормально (не хорошо, это слишком медленно). Но тот же URL-адрес, который загружается с onNewIntent(): не работает !!!. После того, как я сделал это в onNewIntent(), URL-адреса не были загружены с использованием webView.loadurl(), и текущая страница становится неподвижной. то есть. полосы прокрутки перемещаются в WebView, но страница не прокручивается. Я проверил тот же URL-адрес в onCreate() и он работает.

Для делать это я передаю URL с

intent.putExtra("url", Config.URL+targetUrl); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

с ожидающими намерениями от уведомлений. Хотя он работает на некоторых устройствах, например, в Google Nexus. Но он не работает на большинстве телефонов. У меня есть

android:hardwareAccelerated="true" 

Myclient

public class MyClient extends WebViewClient{ 
    private Context context; 
    private Activity activity; 
    private Handler handler; 
    private Runnable runnable; 
    private ProgressBar viewBar; 
    private String ret,ret2; 
    public void setFirstLoad(boolean firstLoad) { 
     this.firstLoad = firstLoad; 
    } 

    private boolean firstLoad=false; 
    public MyClient(Activity activity, ProgressBar bar) { 
     this.context = activity.getApplicationContext(); 
     this.activity = activity; 
     viewBar=bar; 
     handler=new Handler(); 
    } 

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     /*if (url.startsWith("tel:")) { 
      Intent intent = new Intent(Intent.ACTION_DIAL, 
        Uri.parse(url)); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent); 
     }else if(url.startsWith("http:") || url.startsWith("https:")) { 
      *//*view.setVisibility(View.GONE); 
      viewBar.setVisibility(View.VISIBLE);*//* 
      view.loadUrl(url); 
     } 
     return true;*/ 
     if (Uri.parse(url).getHost().equals("www.somepage.com")) { 
      return false; 
     } 
     // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs 
     try { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      context.startActivity(intent); 
      Answers.getInstance().logShare(new ShareEvent() 
      .putContentId(Build.USER) 
      .putMethod(shareName(url)) 
      .putContentName(contentDecode(url)) 
      .putContentType("news_share")); 
     }catch (android.content.ActivityNotFoundException e){ 
      Log.e("Activity not found",e.toString()); 
      Toast.makeText(context,"Application not found",Toast.LENGTH_LONG).show(); 
     } 

     return true; 

    } 

    @Override 
    public void onReceivedError(final WebView view, int errorCode, String description, final String failingUrl) { 
     //Clearing the WebView 
     try { 
      view.stopLoading(); 
     } catch (Exception e) { 
     } 
     try { 
      view.clearView(); 
     } catch (Exception e) { 
     } 
     if (view.canGoBack()) { 
      view.goBack(); 
     } 
     view.loadUrl("about:blank"); 

     //Showing and creating an alet dialog 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(activity); 
     alertDialog.setTitle("Error"); 
     alertDialog.setMessage("No internet connection was found!"); 
     alertDialog.setPositiveButton("Retry", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       view.loadUrl(failingUrl); 

      } 
     }); 
     AlertDialog alert = alertDialog.create(); 
     alert.show(); 

     //Don't forget to call supper! 
     super.onReceivedError(view, errorCode, description, failingUrl); 
    } 

    @Override 
    public void onLoadResource(final WebView view, String url) { 
     super.onLoadResource(view, url); 
     //injectScriptFile(view, "js/script.js"); 
     injectCSS(view,"css/style.css"); 
     if (firstLoad){ 
      firstLoad=false; 
      view.setVisibility(View.INVISIBLE); 
      viewBar.setVisibility(View.VISIBLE); 
      runnable=new Runnable() { 
       @Override 
       public void run() { 
        viewBar.setVisibility(View.GONE); 
        view.setVisibility(View.VISIBLE); 
       } 
      }; 
      handler.postDelayed(runnable,2000); 
     } 

     // test if the script was loaded 
     // view.loadUrl("javascript:setTimeout(hideMe(), 200)"); 
    } 

    /*@Override 
    public void onPageFinished(final WebView view, String url) { 

     //System.gc(); 
    }*/ 


    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     System.gc(); 
    } 

Вопрос: Что является проблемой при использовании метода loadurl() в onNewIntent()?

+0

Извините, сэр, вы находите желаемые результаты в ** intent.getStringExtra ("url") **? Кроме того, есть ли странные сообщения в LogCat? Спасибо. – statosdotcom

+0

@statosdotcom Да, я нашел его в намерении. В Logcat показано, что веб-страница загружается, но не отображается. страница не изменяется с предыдущего –

+0

Пожалуйста, включите свой метод OnPause, если вы используете его, как он вызывается до OnNewIntent. Также у вас есть точка останова на OnNewIntent, то есть вы уверены, что она попала? –

ответ

6

Попробуйте откуда вы грузы WebView

web.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return super.shouldOverrideUrlLoading(view, url); 
     } 
    }); 
+0

да, вы из calicut правильно? –

+0

Это не ответ, который он не выполнит после оператора return. Фактически я использую его. –

1

Вы можете использовать WebClient для обработки WebView. Здесь я включаю javascript с загрузкой.

  String aboutURL="YOUR URL"; 

     final ProgressDialog pd = ProgressDialog.show(, "", "Please wait", true); 

     WebSettings settings=Webview.getSettings(); 

     settings.setJavaScriptEnabled(true); 
     settings.setAppCacheEnabled(true); 
     settings.setDomStorageEnabled(true); 
     settings.setLoadsImagesAutomatically(true); 
     settings.setDatabaseEnabled(true); 
     settings.setRenderPriority(WebSettings.RenderPriority.HIGH); 
     settings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
     settings.setSupportZoom(true); 
     settings.setBuiltInZoomControls(true); 

     Webview.setWebViewClient(new WebViewClient() { 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) 
      { 
       pd.show(); 
      } 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       pd.dismiss(); 
      } 
     }); 
     Webview.loadUrl(aboutURL); 

Здесь Загрузка обрабатывается на основе сети

0

Использование Handler, чтобы оставлять действие задержки, как показано ниже будет исправить это, но я не знал, почему.

new Handler().post(webView.loadurl(url));