2012-06-13 18 views
5

Napisałem prosty program, który dosłownie ładuje stronę internetową do widoku strony.Android: removeMessages (int what = 107) nie jest obsługiwany przed ustawieniem WebViewCore, gdy adres URL zawiera http

Adres URL zawiera http: //, a widok internetowy działa świetnie, z wyjątkiem tego powodującego irytujący błąd 107, który większość osób mówi, ponieważ twój URL nie zawiera nagłówka http.

Szukałem w całym internecie i nie mógł znaleźć coś podobnego moim przypadku

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) 

Moje XML wygląda następująco:

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

A mój kod Java wygląda następująco:

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

} 

W mojej głównej klasie nazywam to:

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); 
     } 
    }); 
} 
+0

Mam ten sam problem. Czy jeszcze coś wymyśliłeś? –

+0

Nie. Nie mogę się doczekać, jak go rozwiązać, mimo że program działa mimo wszystko, nie wiem, jak uzyskać wyjątki. – phil88530

+0

Możliwy duplikat [Android: EventHub.removeMessages (int what = 107) nie jest obsługiwany przed wyświetleniem WebViewCore skonfigurować] (http://stackoverflow.com/questions/10512282/android-eventhub-removemessagesint-what-107-jest-not-supported-before-the-we) – Sam

Odpowiedz

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

To zadziałało dla mnie w ICS.

+1

Dziękuję za odpowiedź, ale to nie rozwiązuje tego błędu w moim przypadku: -s – anticafe

Powiązane problemy