15

Tôi đang sử dụng WebView để tải trang web. Nhưng nó rất chậm và bị rò rỉ khi các trang web cụ thể được tải. Tôi đang tải WebView bằng mã sau.WebView không tải trang web

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

      } 
    } 

Nhưng tôi kêu gọi webView.loadUrl(Config.URL); (Config.URL có thể chứa cùng một url như đã nêu ở trên) trong onCreate() phương pháp sau khởi WebView với những điều sau đây.

 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); 

tải một từ onCreate() đang làm việc tốt (không tốt, nó quá chậm). Nhưng cùng một URL đang tải từ onNewIntent()không hoạt động !!!. Sau khi tôi thực hiện điều này trong onNewIntent() không có URL nào được tải bằng cách sử dụng webView.loadurl() và trang hiện tại đang nhận được bất động. I E. thanh cuộn đang di chuyển trong WebView nhưng trang không cuộn. Tôi đã kiểm tra cùng một URL trong onCreate() và đang hoạt động.

Để làm điều mà tôi đang đi qua url với

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

với mục đích cấp phát từ các thông báo. Mặc dù nó đang hoạt động ở một số thiết bị, nghĩa là Google Nexus. Nhưng nó không hoạt động trên hầu hết các điện thoại. Tôi có

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(); 
    } 

Câu hỏi đặt ra là: vấn đề là gì khi sử dụng phương pháp trong loadurl()onNewIntent()?

+0

Xin lỗi, bạn có đang tìm kết quả mong muốn trong ** intent.getStringExtra ("url") ** không? Ngoài ra, có tin nhắn lạ ở LogCat? Cảm ơn bạn. – statosdotcom

+0

@statosdotcom vâng tôi đã tìm thấy nó trong mục đích. Trong Logcat cho thấy trang web đang tải nhưng không hiển thị. trang không thay đổi từ –

+0

trước đó Vui lòng bao gồm phương thức OnPause của bạn nếu bạn đang sử dụng phương thức này vì nó được gọi trước OnNewIntent. Ngoài ra, bạn có điểm dừng trên OnNewIntent nghĩa là bạn có chắc là nó bị tấn công không? –

Trả lời

6

Hãy thử điều này từ nơi bạn tải webview

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

vâng, bạn đến từ calicut phải không? –

+0

Đây không phải là câu trả lời nó sẽ không thực thi sau khi câu lệnh trả về thực sự tôi đang sử dụng nó. –

1

Bạn có thể sử dụng WebClient để xử lý các webview. Ở đây tôi bao gồm javascript với tải.

  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); 

đây Đang tải được xử lý dựa trên mạng

0

Sử dụng Handler để gửi một hành động chậm trễ như dưới đây sẽ khắc phục điều này, nhưng tôi không biết tại sao.

new Handler().post(webView.loadurl(url)); 
Các vấn đề liên quan