2009-10-13 48 views
7

Tôi có một số tiện ích WebView bên trong Activity. Tôi sử dụng loadData() để đặt nội dung và html này chứa liên kết. Một số của tôi WebViews hoạt động tốt, khi tôi nhấp vào liên kết, trình duyệt web được bắt đầu trong một cửa sổ mới, nhưng một số làm cho ứng dụng của tôi gặp sự cố khi tôi nhấp vào liên kết.Android WebView gặp sự cố khi nhấp vào liên kết

10-13 08:45:24.257: ERROR/AndroidRuntime(751): Uncaught handler: thread main exiting due to uncaught exception 
10-13 08:45:24.308: ERROR/AndroidRuntime(751): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.app.ApplicationContext.startActivity(ApplicationContext.java:627) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:236) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.webkit.CallbackProxy.uiOverrideUrlLoading(CallbackProxy.java:185) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:277) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.os.Handler.dispatchMessage(Handler.java:99) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.os.Looper.loop(Looper.java:123) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at java.lang.reflect.Method.invoke(Method.java:521) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
10-13 08:45:24.308: ERROR/AndroidRuntime(751):  at dalvik.system.NativeStart.main(Native Method) 

Dường như có một vấn đề với Intent rằng WebView cháy khi tôi nhấp vào URL, nhưng tôi không có quyền kiểm soát Intent này, tôi nghĩ.

Có ai có ý tưởng nào không?

tôi sử dụng AsyncTask này để thiết lập các nội dung trong WebView, và nó hoạt động tốt:

public class SetAdTask extends AsyncTask<Void, Void, String>{ 

    private Main main; 
    private WebView webView; 

    public SetAdTask(Main main, WebView webView){ 
     this.main = main; 
     this.webView = webView; 
    } 

    protected void onPreExecute() { 
     Main.Log("onPreExecute()");     
    } 

    protected String doInBackground(Void... params) { 
     Main.Log("doInBackground()");     
     return main.getRestClient().getAdCode(); 
    } 

    protected void onPostExecute(String result) { 
     Main.Log("onPostExecute()"); 

     String html = "<html><head><title>ad</title></head><body>"; 
     html += "<div style=\"color:grey;font-size:12px;\">ADVERTISEMENT<br/>"; 
     html += result; 
     html += "</body></html>"; 
     webView.loadData(html, "text/html", "latin-1"); 
    } 

} 
+0

Ồ, tôi đã tìm thấy sự cố .. Tôi đã khởi tạo webView với ngữ cảnh sai ... tôi đã sử dụng viewView = new WebView (main.getApplicationContext()) ... Có vẻ như webview hiển thị OK, với ngữ cảnh này, nhưng không thể xử lý ý định chính xác ... T –

+1

Bạn có thể trả lời câu hỏi của riêng mình, bạn biết đấy. –

Trả lời

27

Vấn đề được rằng webview của tôi đã được khởi tạo với bối cảnh sai ...

i sử dụng:

WebView w = new WebView(this.getApplicationContext())

bị treo ...

đúng contextactivity tự

WebView w = new WebView(this)

+0

+1 Tôi đã có cùng một vấn đề chính xác, điều này giải quyết nó, cảm ơn! –

+0

Điều đó đã làm điều đó, cảm ơn rất nhiều! Mặc dù sự cố này chỉ xuất hiện trên một số thiết bị nhất định. Oh well, bây giờ nó hoạt động cho tất cả. – Tom

+0

Tôi đã gặp vấn đề tương tự nhưng với các liên kết có thể nhấp trong các mục 'ListView'. Điều này cố định nó; cảm ơn bạn! – jokeefe

9

Nếu bạn không muốn sử dụng một hoạt động như hoàn cảnh của bạn, khác (ngạc nhiên) giải pháp cho vấn đề này là để thiết lập một trống WebViewClient cho WebView:

webView.setWebViewClient(new WebViewClient()); 

Nó có vẻ như một lỗi Android: theo API bạn có thể sử dụng một đối tượng bối cảnh để khởi tạo một webview (nhưng điều này có thể gây ra lỗi mà bạn đã đề cập).

+3

Nếu tôi có thể upvote bạn 100 lần nữa, tôi sẽ! WebView với bối cảnh ứng dụng là một khả năng quan trọng để duy trì trạng thái bên trong của WebView trong các thay đổi định hướng. Tuyệt vời tìm thấy. – Kevin

Các vấn đề liên quan