Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网页内的链接始终返回“;“404未找到”;从webview~Android~Java打开时出错_Java_Android_Webview - Fatal编程技术网

网页内的链接始终返回“;“404未找到”;从webview~Android~Java打开时出错

网页内的链接始终返回“;“404未找到”;从webview~Android~Java打开时出错,java,android,webview,Java,Android,Webview,我有一个网络视图,可以打开一个包含一些链接的网页。然而,如果我点击每个链接,它将显示“404未找到”错误。我在WebViewClient中执行了shouldOverrideUrlLoading,但结果是一样的。 请帮忙。提前谢谢 这就是我如何设置我的webview: WebView web_view = (WebView)view.findViewById(R.id.web_view); WebSettings webSettings = web_view.getSettings(); web_

我有一个网络视图,可以打开一个包含一些链接的网页。然而,如果我点击每个链接,它将显示“404未找到”错误。我在WebViewClient中执行了
shouldOverrideUrlLoading
,但结果是一样的。 请帮忙。提前谢谢

这就是我如何设置我的
webview

WebView web_view = (WebView)view.findViewById(R.id.web_view);
WebSettings webSettings = web_view.getSettings();
web_view.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
         progressBar.setProgress(newProgress);
         super.onProgressChanged(view, newProgress);
     }
 });
 web_view.setWebViewClient(new WebViewClient(){
     @Override
     public void onPageFinished(WebView view, String url) {
         progressBar.setVisibility(View.GONE);
         super.onPageFinished(view, url);
     }
     @Override
    public void shouldOverrideUrlLoading(Webview view, String url){
        progressBar.setProgress(0);
        progressBar.setVisibility(View.VISIBLE);
        return super.shouldOverrideUrlLoading(view,url);
    }
 })
 webSettings.setJavaScriptEnabled(true);
 web_view.loadUrl("http://someurl.com");
我也这样做了:

    @Override
    public void shouldOverrideUrlLoading(Webview view, String url){
        progressBar.setProgress(0);
        progressBar.setVisibility(View.VISIBLE);
        view.loadUrl(url);
        return true;
    }
但这两种情况都会导致“404未找到”


请提供任何帮助。

准备版面,以在出现错误时显示,而不是网页(脏的“未找到页面”消息)。版面有一个按钮,“重新加载”和一些指导消息

如果发生错误,请记住使用布尔值并显示我们准备的布局

如果用户单击“重新加载”按钮,则将MBerrorochared设置为false。并将mbReloadPressed设置为true。 如果mbErrorOccured为false,mbReloadPressed为true,则表示webview已成功加载页面。”原因如果错误再次发生,则onReceivedError(…)上的mbErrorOccured将设置为true 这是我的全部资料来源。看看这个

公共类MyWebViewActivity扩展了ActionBarActivity实现了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);
        }
    };
}

}

准备版面,以在出现错误时显示,而不是网页(脏的“未找到页面”消息)。版面有一个按钮,“重新加载”和一些指导消息

如果发生错误,请记住使用布尔值并显示我们准备的布局

如果用户单击“重新加载”按钮,则将MBerrorochared设置为false。并将mbReloadPressed设置为true。 如果mbErrorOccured为false,mbReloadPressed为true,则表示webview已成功加载页面。”原因如果错误再次发生,则onReceivedError(…)上的mbErrorOccured将设置为true 这是我的全部资料来源。看看这个

公共类MyWebViewActivity扩展了ActionBarActivity实现了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);
        }
    };
}

}试试这个。。。这是AS默认webview活动中的代码,由AS生成

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

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl("http://www.google.com");
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.setWebViewClient(new WebViewClient());

}

旁注:-->iInitiations()指的是左侧的Nagiviation抽屉,可以忽略。

试试这个。。。这是AS默认webview活动中的代码,由AS生成

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

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    myWebView.getSettings().setJavaScriptEnabled(true);
    myWebView.loadUrl("http://www.google.com");
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.setWebViewClient(new WebViewClient());

}

旁注:-->iinitInstances()指的是左侧的Nagiviation抽屉,可以忽略。

使您具有internet连接,在清单文件中具有适当的权限,url正常工作使您具有internet连接,在清单文件中具有适当的权限,url正常工作