【问题标题】:Android Studio Webview - Show no connection message instead of in Android App after it has loaded, instead of ERR_NAME_NOT_RESOLVEDAndroid Studio Webview - 加载后不显示连接消息,而不是在 Android App 中显示,而不是 ERR_NAME_NOT_RESOLVED
【发布时间】:2018-08-23 23:09:23
【问题描述】:

我有这个用于 webview 的代码,以便它在 Android Studio 中没有连接时显示它在没有连接的地方显示一条消息,然后用户按下一个按钮以查看是否再次连接,它做得很好但只是第一次打开。页面加载互联网后,如果您停用互联网并输入任何 url,它会再次显示 404 错误,而不是显示布局和重试连接到互联网的按钮。

这是另一个名为 NoConnection.java 的失败中创建的代码,用于在编码中有更多顺序。 如果您能准确告诉我要在代码中放置什么以及放在哪里,那就太好了,因为我是 Android Studio 的新手。

import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

public class NoConnection extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_no_connection);
    }


    public void retry(View view){


        if(isNetworkAvailable() == true){
            Intent Intent = new Intent(NoConnection.this, SplaceScreen.class);
            startActivity(Intent);
        }else{
            Toast.makeText(this, "No internet connection.", Toast.LENGTH_LONG).show();
        }


    }



    public boolean isNetworkAvailable() {
        // Get Connectivity Manager class object from Systems Service
        ConnectivityManager cm = (ConnectivityManager)  getSystemService(Context.CONNECTIVITY_SERVICE);

        // Get Network Info from connectivity Manager
        NetworkInfo networkInfo = cm.getActiveNetworkInfo();

        // if no network is available networkInfo will be null
        // otherwise check if we are connected
        if (networkInfo != null && networkInfo.isConnected()) {
            return true;
        }
        return false;
    }
}

现在,我该如何修改它,以便在网站加载后它可以工作并且您在上面导航它会显示消息?

提前致谢,

【问题讨论】:

    标签: android android-studio url webview network-programming


    【解决方案1】:

    这里的解决方案是每次点击链接(即加载网页)时检查isNetworkAvailable()。你需要做的是,在 WebView 中监听 urlLoad 事件,在加载之前,调用isNetworkAvailable()

    您可以通过以下方式做到这一点:

    1. 为 WebView 设置 WebViewClient

    2. 在您的 WebViewClient 中,覆盖 shouldOverrideUrlLoading() 方法。每次在 WebView 中加载 url 时都会调用此方法。在这个回调方法中调用isNetworkAvailable()。还有另一个回调方法onPageStarted() 在页面加载之前被调用。你也可以试试这个方法。

    1. 您可以尝试覆盖onReceivedError() 方法。当 url 加载失败时,将调用此方法。

    有很多方法可以做到这一点,所以看看什么适合你,然后去做。

    【讨论】:

    • 您能否详细解释一下方法一。因为在 mainActivity.java 中已经有一个 WebViewClient。有这个:webView.setWebViewClient(new WebViewClient())。这就是你在说的吗?你能告诉我具体的代码放在哪里,放在哪里,我是菜鸟。哦,如果我使用 onReceivedError 如何将其重定向到我的公共类“NoConnection”,以便它显示按钮消息和所有内容?
    • 您需要扩展WebViewClient 并创建自己的CustomWebViewClient。检查这个:stackoverflow.com/a/38484061/4747587
    • 你能告诉我具体放什么以及在哪里解决问题。正如我所说,我是菜鸟。这里好像有字数限制,但是如果代码很大,请你把它放在其他答案上。
    • 兄弟,我编辑了问题供您检查,如果您能告诉我要添加什么来解决该问题。
    • 我的意思是我知道你的答案是对的,但老实说我很菜鸟,不知道该怎么做,如果你告诉我该放什么会很酷代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多