【问题标题】:Android webview page unavailableAndroid webview 页面不可用
【发布时间】:2012-12-19 01:02:15
【问题描述】:

我开发了一个小型 android webview 应用程序来访问基于 PHP 的内部(本地网络)站点。

这是我的代码:

package com.CheckInventory;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebStorage;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

@SuppressWarnings("unused")
public class CheckInventoryActivity extends Activity {
    WebView webview;
    String username; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        setContentView(R.layout.main);
        webview = (WebView) findViewById(R.id.webview);
        WebView webView = (WebView) findViewById(R.id.webview);
        webView.setBackgroundColor(0);
        webView.setBackgroundResource(R.drawable.myimage);
        webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
        WebSettings webSettings = webview.getSettings();
        webSettings.setLoadWithOverviewMode(true);

        webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

        webSettings.setJavaScriptEnabled(true);
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setDatabasePath("/data/data/"+this.getPackageName()+"/databases/");
        webSettings.setDomStorageEnabled(true);
        webview.setWebChromeClient(new WebChromeClient());
        webview.loadUrl("http://192.168.0.124/android");
        webview.setWebViewClient(new HelloWebViewClient());

    }
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }


    @Override
    public boolean onKeyDown (int keyCode, KeyEvent event) {
        if((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()){
            //webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

该站点具有身份验证,但我想在应用程序和站点之间添加一些身份验证(我该怎么做?可能在调用 url 时传递一个参数),其次,更重要的是,我具体放在哪里onReceivedError 以便用户在离开建筑物或连接松动时永远不会看到 url 或页面。

public void onReceivedError(WebView view, int errorCod,String description, String failingUrl) {
        Toast.makeText(Webform.this, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show();
    }

我在Detecting Webview Error and Show Message看到了这个解释,但不知道在哪里实现。

提前谢谢你

【问题讨论】:

    标签: android webview webviewclient


    【解决方案1】:

    您需要创建扩展 WebViewClient 并实现方法 OnReceivedError

    的类

    喜欢这个

    class myWebClient extends WebViewClient {
    
        @Override
        public void onReceivedError(WebView view, int errorCode,
                String description, String failingUrl) {
            Toast.makeText(Webform.this, "Your Internet Connection May not be active Or " + description , Toast.LENGTH_LONG).show();
            super.onReceivedError(view, errorCode, description, failingUrl);
        }
    
    }
    

    然后您需要将新的 WebViewClient 设置为您的 WebView

        web = (WebView) findViewById(R.id.webview);
        web.setWebViewClient(new myWebClient());
    

    希望对你有帮助

    【讨论】:

    • UnQuaiz:我不知道如何实现你的答案,你能像编写代码一样向我展示整个代码吗?
    • 衷心感谢您的宝贵时间!!!不幸的是,它没有用。它仍然显示未找到和 url。最终,我正在寻找类似于 google play 的解决方案,如果互联网不可用,它会显示重试按钮。既然是谷歌的人做的,那是有可能的,我只是想知道这有多难。
    • 也许您应该首先检查互联网连接,然后显示警告并重试按钮?试试这个:stackoverflow.com/questions/11096987/…
    • UnQuaiz:package com.GlobalChess;导入 android.widget.Toast;导入android.content.Context;公共类 JavaScriptInterface { 上下文 mContext; /** 实例化接口并设置上下文 / JavaScriptInterface(Context c) { mContext = c; } /* 从网页显示一个 toast */ public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_LONG).show(); } }
    【解决方案2】:

    您可以在您的HelloWebViewClient 类中添加onReceivedError,并在遇到错误时处理您想要处理的内容。

    private class HelloWebViewClient extends WebViewClient {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){
               //Your code to do
            Toast.makeText(getActivity(), "Your Internet Connection May not be active Or " + error , Toast.LENGTH_LONG).show();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多