Android:当url包含http时,在设置WebViewCore之前不支持removeMessages(int What = 107)

2024-01-15

我编写了一个简单的程序,它将网页加载到网络视图中。

URL 包含 http:// 并且 Web 视图工作得很好,除了这个恼人的 107 错误之外,大多数人说这是因为你的 url 不包含 http 标头。

我在网上搜索了所有内容,但找不到与我的情况类似的内容

06-13 09:12:25.259: W/webcore(656): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
06-13 09:12:25.259: W/webcore(656):     at android.webkit.WebViewCore$EventHub.removeMessages(WebViewCore.java:1683)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.WebViewCore$EventHub.access$7900(WebViewCore.java:926)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.WebViewCore.removeMessages(WebViewCore.java:1795)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.WebView.sendOurVisibleRect(WebView.java:2917)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.ZoomManager.setZoomScale(ZoomManager.java:593)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.ZoomManager.access$1700(ZoomManager.java:49)
06-13 09:12:25.259: W/webcore(656):     at android.webkit.ZoomManager$PostScale.run(ZoomManager.java:984)
06-13 09:12:25.259: W/webcore(656):     at android.os.Handler.handleCallback(Handler.java:605)
06-13 09:12:25.259: W/webcore(656):     at android.os.Handler.dispatchMessage(Handler.java:92)
06-13 09:12:25.259: W/webcore(656):     at android.os.Looper.loop(Looper.java:137)
06-13 09:12:25.259: W/webcore(656):     at android.app.ActivityThread.main(ActivityThread.java:4424)
06-13 09:12:25.259: W/webcore(656):     at java.lang.reflect.Method.invokeNative(Native Method)
06-13 09:12:25.259: W/webcore(656):     at java.lang.reflect.Method.invoke(Method.java:511)
06-13 09:12:25.259: W/webcore(656):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-13 09:12:25.259: W/webcore(656):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-13 09:12:25.259: W/webcore(656):     at dalvik.system.NativeStart.main(Native Method)

我的 XML 看起来像:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/navBar"
        android:layout_width="fill_parent"
        android:layout_height="40dp"
        android:orientation="vertical" >
    </LinearLayout>

    <WebView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="6.40" >
    </WebView>
</LinearLayout>

我的java代码如下所示:

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;

public class MobileWebView extends Activity{
private WebView myWebView;
final Context context = this;   //set the context to be itself
ProgressDialog progressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.web_view);  //set view
    //set the webview
    myWebView = (WebView) findViewById(R.id.webView);
    myWebView.getSettings().setJavaScriptEnabled(true);

    //setup and load the progress bar
    progressDialog = new ProgressDialog(context);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.setMessage("Loading. Please wait...");

    myWebView.setWebViewClient(new MyWebViewClient(){
        @Override
        public void onPageFinished(WebView view, final String url) {
            progressDialog.dismiss();


        }
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            //make sure dialog is showing
            if(! progressDialog.isShowing()){
                progressDialog.show();
            }
        }
    });

    //get the site url passed from main activity
    String urlName = this.getIntent().getExtras().getString("site");
    System.out.println(urlName);
    myWebView.loadUrl(urlName);

    SetupNavBar();
}

private void SetupNavBar(){
    //set nav bar
    LinearLayout ll = (LinearLayout)findViewById(R.id.navBar);

    NavigationBar nb = new NavigationBar(this);
    nb.setLeftBarButton("Back");
    nb.setBarTitle("Online Doctor");
    NavigationBar.NavigationBarListener nbl = new NavigationBar.NavigationBarListener() {

        @Override
        public void OnNavigationButtonClick(int which) {
            //if left button
            if(which == 0){
                finish();
            }
        }
    };

    nb.setNavigationBarListener(nbl);

    ll.addView(nb);
}


//override the override loading method for the webview client
private class MyWebViewClient extends WebViewClient {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if(url.startsWith("http")){
            progressDialog.show();
            view.loadUrl(url);
            return true;
        } else {
            return false;
        }
    }
}

}

在我的主课中,我在以下情况下调用此方法:

final Context context = this;   //set the context to be itself
private void setup(){
    //assign buttons
    Button login = (Button)findViewById(R.id.loginButton);
    Button register = (Button)findViewById(R.id.registerButton);

    //setup onclick for each button
    bindButtonWithVisitWebsite(login, "https://onlinedoctor.lloydspharmacy.com/login");
    bindButtonWithVisitWebsite(register,"https://onlinedoctor.lloydspharmacy.com/register");
}

private void bindButtonWithVisitWebsite(Button b, final String urlName){
    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Bundle bundle = new Bundle();
            bundle.putString("site",urlName);
            Intent intent = new Intent(context, MobileWebView.class);
            intent.putExtras(bundle);
        }
    });
}

WebSettings settings = webView.getSettings();
settings.setPluginState(PluginState.ON);

这对我在 ICS 中很有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:当url包含http时,在设置WebViewCore之前不支持removeMessages(int What = 107) 的相关文章

随机推荐