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);
}
});
}
WebSettings settings = webView.getSettings();
settings.setPluginState(PluginState.ON);
This worked for me in ICS.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With