5

I wrote a simple program which literally loads a webpage into a web view.

The URL contains http:// and the web view works great, apart from it still through this annoying 107 error which most ppl say is because your url doesn't contain http header.

I searched all over web and couldn't find anything like my case

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)

My XML looks like:

<?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>

And my java code looks like:

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;
        }
    }
}

}

In my main class, I call this when:

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);
        }
    });
}
phil88530
  • 1,499
  • 3
  • 19
  • 27
  • I am having the same issue. Did you figure anything out yet? – Shane Grant Jun 14 '12 at 19:55
  • No. Still looking forward how to solve it, although program works in anyway, just not sure how to get ride of the exceptions – phil88530 Jun 15 '12 at 16:59
  • possible duplicate of [Android : EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up](http://stackoverflow.com/questions/10512282/android-eventhub-removemessagesint-what-107-is-not-supported-before-the-we) – Sam Nov 06 '12 at 00:26
  • Hi Sam: if you look at my url, it is a https://, so it's a bit differ than this question since it doesn't solves my issue – phil88530 Nov 16 '12 at 15:41
  • I'm having the same problem. Did you ever succeed with fixing it? Can you help? http://stackoverflow.com/questions/31775385/webview-eventhub-removemessagesint-what-107 – dephinera Aug 04 '15 at 10:36

1 Answers1

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

This worked for me in ICS.

Santhosh
  • 1,962
  • 2
  • 16
  • 23