我写了一个简单的程序,它实际上将网页加载到 Web 视图中。
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);
}
});
}