"ওয়েব পৃষ্ঠাগুলি উপলভ্য নয়" প্রদর্শন থেকে ওয়েবভিউকে আটকাবেন


88

আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা একটি ওয়েবভিউর ব্যাপক ব্যবহার করে। যখন এই অ্যাপ্লিকেশনটির ব্যবহারকারীর ইন্টারনেট সংযোগ নেই, তখন একটি পৃষ্ঠা "ওয়েব পৃষ্ঠা উপলব্ধ নয়" এবং অন্যান্য বিভিন্ন পাঠ্য উপস্থিত থাকে saying আমার ওয়েবভিউতে এই জেনেরিক পাঠ্যটি না দেখানোর কী উপায় আছে? আমি আমার নিজস্ব ত্রুটি পরিচালনা পরিচালনা করতে চাই।

private final Activity activity = this;

private class MyWebViewClient extends WebViewClient
 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
  // I need to do something like this:
  activity.webView.wipeOutThePage();
  activity.myCustomErrorHandling();
  Toast.makeText(activity, description, Toast.LENGTH_LONG).show();
 }
}

আমি ওয়েবভিউ-> ক্লিয়ারভিউটি দৃশ্যটি দৃশ্যটি পরিষ্কার করে না।


4
ওয়েবভিউ দেখানোর আগে আপনি কেন ইন্টারনেট সংযোগটি পরীক্ষা করছেন না এবং যদি কোনও ইন্টারনেট সুবিধা না পাওয়া যায় তবে আপনি ওয়েবভিউ দেখানো বাদ দিতে পারেন এবং পরিবর্তে আপনি কোনও ইন্টারনেট বার্তা না দিয়ে একটি সতর্কতা বা টোস্ট দেখাতে পারেন?
অ্যান্ড্রো সেলভা

@ জোজো আপনি কি উত্তর হিসাবে সঠিক হিসাবে টিক দিতে পারেন? সম্ভবত আমার: পি
শেরিফ এলখতিব

উত্তর:


102

প্রথমে আপনার নিজের ত্রুটি পৃষ্ঠাটি এইচটিএমএল এ তৈরি করুন এবং এটি আপনার সম্পদ ফোল্ডারে রাখুন, আসুন এটিকে myerrorpage.html কল করুন তারপরে onReectedError দিয়ে:

mWebView.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        mWebView.loadUrl("file:///android_asset/myerrorpage.html");

    }
});

27
পুরানো "ওয়েবপেজ লোড করা হয়নি" ত্রুটি পৃষ্ঠাটি সম্পদ থেকে কাস্টম ত্রুটি পৃষ্ঠা দ্বারা প্রতিস্থাপন করার আগে এক সেকেন্ডের ভগ্নাংশের জন্য দেখায়
চেনু মাদান

4
চীনুর সাথে একমত। এর চেয়ে আরও ভাল সমাধান হতে হবে।
জোজুয়া

4
1. ওয়েবউইভটি অদৃশ্য থাকাকালীন আপনি ওয়েব সামগ্রী লোড করতে পারেন (এবং এটির উপরে কোনও অগ্রগতি খারাপ প্রদর্শিত হতে পারে) এবং পৃষ্ঠাটি সাফল্যের সাথে লোড করা থাকলে / ত্রুটিতে "myerrorpage.html" লোড করা থাকলে এটি প্রদর্শন করতে পারেন। ২. আপনার সচেতন হওয়া উচিত যে পৃষ্ঠাটি লোড হয়ে যাওয়ার পরে জেএস-এ ওআর সমস্যাটি লোড করার পরে সমস্যাগুলি দেখা দিলে অনি রিসিপইরর ট্রিগার হয়ে উঠবে (ডকুমেন্ট.ডিআর () ইভেন্টে চালিত jQuery ফাংশনগুলির মতো)। ডেস্কটপ ব্রাউজার - মোবাইল ব্রাউজারগুলির মতো এটি সম্পর্কে ব্যবহারকারীকে অবহিত না করে জেএস ত্রুটির অনুমতি দেবে।
ফানকসোলব্রথর

6
view.loadUrl("about:blank");একটি সেকেন্ডের ভগ্নাংশের জন্য ত্রুটি পৃষ্ঠা প্রদর্শন করা থেকে রোধ করতে লোডআর্লের আগে যুক্ত করুন ।
আশিষ

4
কোথায় যে myerrorpage.html ফাইল রাখবেন? সেই অ্যান্ড্রয়েড সম্পদ ফোল্ডারটি কোথায় অবস্থিত?
নিবেদিত কান্নাদা

34

আমি সবচেয়ে ভাল সমাধানটি খুঁজে পেয়েছি হ'ল অনারসিপড এয়ার ইভেন্টে একটি ফাঁকা পৃষ্ঠা লোড করা:

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    super.onReceivedError(view, errorCode, description, failingUrl);

    view.loadUrl("about:blank");
}

ভাল ধারণা! আমার ক্ষেত্রে আমি view.loadUrl(noConnectionUrl);দু'বার যুক্ত করেছি (যেখানে কোনও সংযোগ ইউআরএল স্থানীয় ত্রুটি বার্তা সহ ফাইল) file এটি একটি সেকেন্ডের ভগ্নাংশের জন্য অন্তর্নির্মিত ত্রুটি পৃষ্ঠাটি "দেখতে" সহায়তা করতে সহায়তা করে।
hQuse

4
দয়া করে নোট করুন, আপনি যদি পরিচালনা করছেন webView.goBack()তবে এই ফাঁকা পৃষ্ঠার জন্য শর্তটি পরিচালনা করতে ভুলবেন না। অন্যথায় আপনার পূর্ববর্তী পৃষ্ঠাটি লোড হবে এবং যদি আবার ব্যর্থ হয় তবে আপনি এই ফাঁকা পৃষ্ঠাটি আবার দেখতে পাবেন।
চিন্তন শাহ

সুতরাং, এটি পরিচালনা করার সবচেয়ে ভাল উপায় কী?
মোস্তফা সোলিমান

@ মোসোলি এটি আপনার প্রয়োজনের উপর নির্ভর করে। একটি খালি পৃষ্ঠা প্রদর্শন করার বিকল্প হ'ল কিছু কাস্টম ইউআই বা ক্যাশেড ওয়েবপৃষ্ঠা দেখানো হবে।
7heViking

10

অবশেষে, আমি এই সমাধান। (এটি এখন অবধি কার্যকর হয় ..)

আমার সমাধানটি এরকম ...

  1. ওয়েব পৃষ্ঠার পরিবর্তে কোনও ত্রুটি ঘটলে প্রদর্শন করার জন্য লেআউটটি প্রস্তুত করুন (একটি নোংরা 'পৃষ্ঠা বার্তাটি পাওয়া যায় নি') লেআউটে একটি গাইড বোতাম রয়েছে, কিছু গাইড বার্তা সহ "RELOAD" রয়েছে।

  2. যদি কোনও ত্রুটি ঘটে থাকে তবে বুলিয়ান ব্যবহার করে মনে রাখুন এবং আমরা প্রস্তুত লেআউটটি দেখান।

  3. যদি ব্যবহারকারীরা "RELOAD" বোতামটি ক্লিক করেন তবে এমবিআরআরঅ্যাকচারকে মিথ্যা হিসাবে সেট করুন। এবং mbReloadPress টি সত্য হিসাবে সেট করুন।
  4. যদি mbErrorOccured মিথ্যা এবং এমবিরোলোপ্রেসড সত্য হয়, এর অর্থ ওয়েব ভিউ লোড হওয়া পৃষ্ঠাটি সাফল্যের সাথে। 'যদি ত্রুটি আবার দেখা দেয় তবে এমবিআরআরঅ্যাকচারটি অন রিরেসিড এয়ারে সত্য হবে (...)

এখানে আমার সম্পূর্ণ উত্স। এটা দেখ.

public class MyWebViewActivity extends ActionBarActivity implements OnClickListener {

    private final String TAG = MyWebViewActivity.class.getSimpleName();
    private WebView mWebView = null;
    private final String URL = "http://www.google.com";
    private LinearLayout mlLayoutRequestError = null;
    private Handler mhErrorLayoutHide = null;

    private boolean mbErrorOccured = false;
    private boolean mbReloadPressed = false;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_webview);

        ((Button) findViewById(R.id.btnRetry)).setOnClickListener(this);
        mlLayoutRequestError = (LinearLayout) findViewById(R.id.lLayoutRequestError);
        mhErrorLayoutHide = getErrorLayoutHideHandler();

        mWebView = (WebView) findViewById(R.id.webviewMain);
        mWebView.setWebViewClient(new MyWebViewClient());
        WebSettings settings = mWebView.getSettings();
        settings.setJavaScriptEnabled(true);
        mWebView.setWebChromeClient(getChromeClient());
        mWebView.loadUrl(URL);
    }

    @Override
    public boolean onSupportNavigateUp() {
        return super.onSupportNavigateUp();
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();

        if (id == R.id.btnRetry) {
            if (!mbErrorOccured) {
                return;
            }

            mbReloadPressed = true;
            mWebView.reload();
            mbErrorOccured = false;
        }
    }

    @Override
    public void onBackPressed() {
        if (mWebView.canGoBack()) {
            mWebView.goBack();
            return;
        }
        else {
            finish();
        }

        super.onBackPressed();
    }

    class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return super.shouldOverrideUrlLoading(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

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

        @Override
        public void onPageFinished(WebView view, String url) {
            if (mbErrorOccured == false && mbReloadPressed) {
                hideErrorLayout();
                mbReloadPressed = false;
            }

            super.onPageFinished(view, url);
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            mbErrorOccured = true;
            showErrorLayout();
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    }

    private WebChromeClient getChromeClient() {
        final ProgressDialog progressDialog = new ProgressDialog(MyWebViewActivity.this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setCancelable(false);

        return new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }
        };
    }

    private void showErrorLayout() {
        mlLayoutRequestError.setVisibility(View.VISIBLE);
    }

    private void hideErrorLayout() {
        mhErrorLayoutHide.sendEmptyMessageDelayed(10000, 200);
    }

    private Handler getErrorLayoutHideHandler() {
        return new Handler() {
            @Override
            public void handleMessage(Message msg) {
                mlLayoutRequestError.setVisibility(View.GONE);
                super.handleMessage(msg);
            }
        };
    }
}

সংযোজন: এখানে লেআউটটি ....

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rLayoutWithWebView"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<WebView
    android:id="@+id/webviewMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<LinearLayout
    android:id="@+id/lLayoutRequestError"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:background="@color/white"
    android:gravity="center"
    android:orientation="vertical"
    android:visibility="gone" >

    <Button
        android:id="@+id/btnRetry"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:minWidth="120dp"
        android:text="RELOAD"
        android:textSize="20dp"
        android:textStyle="bold" />
</LinearLayout>


আপনি কি দয়া করে আপনার সংস্থান ফাইলটি শেয়ার করতে পারেন? আমি নবাগত।
রাজন রাওয়াল

@ রাজরনওয়াল আমি লেআউটটির উদাহরণ সম্পাদনা করে যুক্ত করেছি। :)
সেমিক্রোমেন্স

আমি কোনও অগ্রগতি বার দেখতে পাচ্ছি না তবে আমি সেখানে কোড দেখতে পাচ্ছি। :-(
রাজন রাওয়াল 1'15

8

যখন ওয়েবভিউ কিছু কাস্টম ভিউতে এম্বেড করা থাকে যেমন ব্যবহারকারীর প্রায়শই বিশ্বাস হয় যে তিনি কোনও ওয়েব ভিউ দেখছেন না, এমন দৃশ্যে "পৃষ্ঠাটি লোড করা যায়নি" ত্রুটিটি হতাশাজনক। আমি এই জাতীয় পরিস্থিতিতে সাধারণত যা করি তা হ'ল আমি ফাঁকা পৃষ্ঠা লোড করছি এবং নীচের মত টোস্ট বার্তা দেখাব

webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                Log.e(TAG," Error occured while loading the web page at Url"+ failingUrl+"." +description);     
                view.loadUrl("about:blank");
                Toast.makeText(App.getContext(), "Error occured, please check newtwork connectivity", Toast.LENGTH_SHORT).show();
                super.onReceivedError(view, errorCode, description, failingUrl);
            }
        });

7

অ্যান্ড্রয়েড ওয়েবভিউ অন-রিসিপড এরির () এ আলোচনাটি দেখুন । এটি বেশ দীর্ঘ, তবে sensক্যমত্য বলে মনে হচ্ছে যে) ক) "ওয়েব পৃষ্ঠাটি উপলব্ধ নেই" পৃষ্ঠাটি উপস্থিত হওয়া বন্ধ করতে পারবেন না, তবে খ) অন-রিরেক্টড এরির পাওয়ার পরে আপনি সর্বদা একটি খালি পৃষ্ঠা লোড করতে পারবেন


এই ছেলেরা onReceivedErrorমোটেই ট্রিগার না করার কথা বলছে । কোনও ইন্টারনেট সংযোগ নেই যখন এটি আমার কোডে সঠিকভাবে ট্রিগার করছে।
জোজো

2

আপনি GETপৃষ্ঠার সামগ্রী পেতে একটি অনুরোধ ব্যবহার করতে পারেন এবং তারপরে সেই ডেটাটি ব্যবহার করে Webview, আপনি একাধিক সার্ভার কল ব্যবহার করছেন না। বৈধতার জন্য বস্তুটি Javascriptপরীক্ষা করতে আপনি বিকল্পটি ব্যবহার করতে পারেন DOM


এটি একটি ভাল ধারণা, তবে এটি সত্যিই দুর্ভাগ্য যে আমাদের এমন কিছু করা দরকার ...
জেফ্রি ব্লাটম্যান

2

সম্ভবত আমি প্রশ্নটি ভুল বুঝেছি, তবে মনে হচ্ছে আপনি বলছেন যে আপনি ত্রুটিটি পেয়েছেন কলব্যাক পেয়েছেন, এবং আপনি কেবল জিজ্ঞাসা করছেন ত্রুটিটি না দেখানোর সর্বোত্তম উপায় কোনটি? আপনি কেন কেবল পর্দা থেকে ওয়েব ভিউ সরিয়ে এবং / অথবা এর উপরে অন্য দৃশ্য দেখান না?


2

এখানে আমি সবচেয়ে সহজ সমাধানটি খুঁজে পেয়েছি। এটা পরীক্ষা করো..

   @Override
        public void onReceivedError(WebView view, int errorCode,
                                    String description, String failingUrl) {
//                view.loadUrl("about:blank");
            mWebView.stopLoading();
            if (!mUtils.isInterentConnection()) {
                Toast.makeText(ReportingActivity.this, "Please Check Internet Connection!", Toast.LENGTH_SHORT).show();
            }
            super.onReceivedError(view, errorCode, description, failingUrl);
        }

এবং এখানে isIntareConnication () পদ্ধতি ...

public boolean isInterentConnection() {
    ConnectivityManager manager = (ConnectivityManager) mContext
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (manager != null) {
        NetworkInfo info[] = manager.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                    return true;
                }
            }
        }
    }
    return false;
}

1

আমি মনে করি আপনি এটি করার জন্য জোর দিলে লোডরুল ফাংশনটি কল করার আগে আপনি কেবল রিসোর্সটি আছে কিনা তা পরীক্ষা করে দেখতে পারেন। সুপারটি কল করার আগে কেবল ফাংশনগুলি ওভাররাইড করুন এবং চেক করুন

রেকর্ড (সম্ভবত অফ-টপিক): HTTP তে, HEAD নামে একটি পদ্ধতি রয়েছে যা নিম্নলিখিত হিসাবে বর্ণিত হয়েছে:

সার্ভারটি প্রতিক্রিয়াতে কোনও বার্তা-শরীরে ফেরত পাঠানো উচিত নয় ব্যতীত শিরোনামের পদ্ধতিটি জিইটির সমান

এই পদ্ধতিটি সুবিধাজনক হতে পারে। যাইহোক আপনি কখনই এটি প্রয়োগ করেন ... এই কোডটি দেখুন:

import java.util.Map;

import android.content.Context;
import android.webkit.WebView;

public class WebViewPreLoad extends WebView{

public WebViewPreLoad(Context context) {
super(context);
}
public void loadUrl(String str){
if(//Check if exists)
super.loadUrl(str);
else
//handle error
}
public void loadUrl(String url, Map<String,String> extraHeaders){
if(//Check if exists)
super.loadUrl(url, extraHeaders);
else
//handle error
}
}

আপনি এই চেক ব্যবহার করে চেষ্টা করতে পারেন

if(url.openConnection().getContentLength() > 0)

6
রিসোর্সটি সেখানে যাওয়ার আগে সেখানে রয়েছে কিনা তা পরীক্ষা করা সার্ভারের বোঝা দ্বিগুণ করবে কারণ সেখানে প্রতি 1 ভার্চুয়াল অনুরোধে 2 টি শারীরিক অনুরোধ থাকবে। এটি একটু ওভারকিল বলে মনে হচ্ছে।
জোজো

4
যাইহোক আপনি এখনও এটি ওভারলোড করতে এবং এইচটিএমএল সামগ্রী পেতে পারেন, এটিতে কোনও ত্রুটি আছে কিনা তা পরীক্ষা করে দেখুন। পার্স এবং এটি প্রদর্শন না করে
শেরিফ এলখতিব

আসলে কীভাবে কেউ এটি বাস্তবায়ন করবে?
জোজো

@ জোজো, আসলে এই পদ্ধতিটি একটি শোধক প্রতিক্রিয়া ফিরিয়ে দেওয়ার কারণে একটি অবৈধ ইউআরএল ঘটলে সার্ভারের বোঝা হ্রাস করে 304 বা 500 প্রতিক্রিয়া ফিরিয়ে আনার চেয়ে অনেক ছোট ওভারহেড।
জাস্টিন শিল্ড

পৃষ্ঠাটি ডাউনলোড করার সময় যদি সংযোগটি হ্রাস পায় তবে এটি সমস্যার সমাধান করবে না
পেড্রো ল্যারিও

0

আপনি ত্রুটি পরিচালনার জন্য যা ব্যবহার করছেন তা আমি কেবল ওয়েবপৃষ্ঠায় পরিবর্তন করব:

getWindow().requestFeature(Window.FEATURE_PROGRESS);  
webview.getSettings().setJavaScriptEnabled(true);  
final Activity activity = this;  
webview.setWebChromeClient(new WebChromeClient() {  
public void onProgressChanged(WebView view, int progress) {  
 // Activities and WebViews measure progress with different scales.  
 // The progress meter will automatically disappear when we reach 100%  
 activity.setProgress(progress * 1000);  
 }  
});  
webview.setWebViewClient(new WebViewClient() {  
public void onReceivedError(WebView view, int errorCode, String description, String 
failingUrl) {  
 Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();  
}  
});  
webview.loadUrl("http://slashdot.org/");

এগুলি সবই http://developer.android.com/references/android/webkit/WebView.html এ পাওয়া যাবে


0

আমি আজ এই বিরক্তিকর গুগল ত্রুটি পৃষ্ঠাগুলি খনন করার এই সমস্যাটিতে কাজ করছি। উপরে প্রদর্শিত অ্যান্ড্রয়েড উদাহরণ কোডের সাথে এবং প্রচুর অন্যান্য ফোরামে এটি সম্ভব (আমি কীভাবে জানি জিজ্ঞাসা করুন):

wv.setWebViewClient(new WebViewClient() {
    public void onReceivedError(WebView view, int errorCode,
                            String description, String failingUrl) {
       if (view.canGoBack()) {
          view.goBack();
        }
       Toast.makeText(getBaseContext(), description, Toast.LENGTH_LONG).show();
       }
    }
});

যদি আপনি একে আরও ওয়েবক্লিয়েন্ট হিসাবে ওভাররাইড ইউরাললয়েডিং () এ রেখে দেন। কমপক্ষে, এটি আমার ২.৩..6 ডিভাইসে আমার জন্য কাজ করছে। এটি পরে কোথায় কাজ করবে তা আমরা দেখতে পাব। এটাই এখন আমাকে হতাশ করবে, আমি নিশ্চিত। গোব্যাক বিটটি আমার। আপনি এটি নাও চাইতে পারেন।


0

এটা চেষ্টা কর

 @SuppressWarnings("deprecation")
 @Override
 public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
      // Your handling
 }

 @Override
 public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
          onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
      }
 }

0

আমরা ওয়েবভিউয়ের দৃশ্যমানতা 0 তে সেট করতে পারি (view.INVISIBLE) এবং কিছু বার্তা প্রদর্শন করতে পারি। এই কোডটি ললিপপটিতে চলমান আমার অ্যাপ্লিকেশনটির জন্য কাজ করে।

@SuppressWarnings("deprecation")
    @Override
    public void onReceivedError(WebView webView, int errorCode, String description, String failingUrl) {
        // hide webView content and show custom msg
        webView.setVisibility(View.INVISIBLE);
        Toast.makeText(NrumWebViewActivity.this,getString(R.string.server_not_responding), Toast.LENGTH_SHORT).show();
    }

    @TargetApi(android.os.Build.VERSION_CODES.M)
    @Override
    public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
        // Redirect to deprecated method, so you can use it in all SDK versions
        onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
    }

0

আমাকে এই সমস্যার মুখোমুখি হতে হয়েছিল এবং এটি বিভিন্ন দৃষ্টিকোণ থেকে সমাধান করার চেষ্টা করেছি। অবশেষে আমি কোনও ত্রুটি ঘটেছে কিনা তা যাচাই করতে একটি পতাকা ব্যবহার করে একটি সমাধান পেয়েছি।

... extends WebViewClient {

    boolean error;

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        showLoading(true);
        super.onPageStarted(view, url, favicon);

        error  = false; // IMPORTANT
    }

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

        if(!error) {
            Observable.timer(100, TimeUnit.MICROSECONDS, AndroidSchedulers.mainThread())
                    .subscribe((data) -> view.setVisibility(View.VISIBLE) );
        }

        showLoading(false);
    }


    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

        view.stopLoading();

        view.setVisibility(View.INVISIBLE) 
        error  = true;  

        // Handle the error
    }


     @Override
    @TargetApi(android.os.Build.VERSION_CODES.M)
    public void onReceivedError(WebView view,
                                WebResourceRequest request,
                                WebResourceError error) {

        this.onReceivedError(view, error.getErrorCode(),
                error.getDescription().toString(),
                request.getUrl().toString());
    }
 }

এইভাবে আমি পৃষ্ঠাটিতে যখনই কোনও ত্রুটি থাকি ততবার আড়াল করি এবং পৃষ্ঠাটি সঠিকভাবে লোড হয়ে গেলে এটি দেখায়।

ক্ষেত্রে সামান্য বিলম্ব যুক্ত।

আমি খালি পৃষ্ঠাটি লোড করার সমাধানটি এড়িয়ে চলেছি কারণ এটি আপনাকে পরে ওয়েবভিউ.রেলোড () লোড করার অনুমতি দেয় না কারণ এটি নেভিগেশন ইতিহাসে সেই নতুন পৃষ্ঠাটি যুক্ত করে।



-1

আপনার ওয়েবভিউক্লিয়েন্ট পদ্ধতিটি ওভাররাইড করুন

@Override
public void onReceivedError(WebView view, int errorCode,
    String description, String failingUrl) {
    view.clearView();
}

view.loadUrl('about:blank') এর পার্শ্ব-প্রতিক্রিয়া রয়েছে, কারণ এটি মূল URL টি লোডিং বাতিল করে cance


view.clearView () নিন্দা করা হয়েছে, দেখতে stackoverflow.com/questions/3715482/clear-webview-content
silva96
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.