2016-04-28 80 views
0

我想加載facebook.com在自定義CSS的web視圖來改變一些東西。我使用jsoup,但每次我開始它的應用程序崩潰。Android Studio Webview與自定義CSS(jsoup)

這是我的代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    try { 
     Document doc = Jsoup.connect("https://www.facebook.com").get(); 
     doc.head().getElementsByTag("link").remove(); 
     doc.head().appendElement("link").attr("rel", "stylesheet").attr("type", "text/css").attr("href", "style.css"); 
     String htmlData = doc.outerHtml(); 
     WebView webview = new WebView(this); 
     setContentView(webview); 
     webview.loadDataWithBaseURL("file:///android_asset/.", htmlData, "text/html", "UTF-8", null); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

logcat的輸出

致命異常:主要過程:com.example.name.firstapp,PID:23936 java.lang中。 RuntimeException:無法啓動活動 ComponentInfo {com.example.name.firstapp/com.example.name.firstapp.MainActivity}: android.os.NetworkOnMainThreadExcept離子在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在android.app.ActivityThread.-wrap11(ActivityThread.java)在 android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102)at android.os.Looper.loop(Looper.java:148)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)C在 android.os.StrictMode $ AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) android.os.NetworkOnMainThreadException在java.net.InetAddress.lookupHostByName(InetAddress.java:431)在 java.net.InetAddress中:aused由 .getAllByNameImpl(InetAddress.java:252)在 java.net.InetAddress.getAllByName(InetAddress.java:215)在 com.android.okhttp.internal.Network $ 1.resolveInetAddresses(Network.java:29) 在 COM .android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 在 com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 在 com.android.okhttp .internal.http。 RouteSelector.next(RouteSelector.java:100) 在 com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 在 com.android.okhttp.internal.http.HttpEngine.nextConnection( HttpEngine.java:340) 在 com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 在 com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java: 248) 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 在 com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 在 com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.connect(DelegatingHttpsURLConnection.java:89) 在 com.android.okhttp.internal.huc.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java) 在 org.jsoup.helper .HttpConnection $ Response.execute(HttpConnection.java:563) at org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:540) at org.jsoup.helper.HttpConnection.execute(HttpConnection。java:227)at org.jsoup.helper.HttpConnection.get(HttpConnection.java:216)at com.example.name.firstapp.MainActivity.onCreate(MainActivity.java:25) at android.app.Activity。 performCreate(Activity.java:6237)在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 在 android.app.ActivityThread。在android.app.ActivityThread中使用handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java)at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage (Handler.java:102) android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main(ActivityThread.java:5417)at java.lang.reflect.Method.invoke(Native Method)at com。 android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

+0

發佈您的logcat –

+0

@NoumanGhaffar這裏是:https://justpaste.it/tqq9 – Droid

回答

0

您連接到網絡中主(UI)線程。所以你得到android.os.NetworkOnMainThreadException。

Android系統不會允許,因爲它阻止了UI線程。因此,使用一些後臺線程,如AsyncTask或IntentService來訪問網絡。

+0

即時通訊完全新的android工作室所以有可能是一個更好的解決方案加載與自定義CSS的實時網站? @DineshBob – Droid

+0

Jsoup.connect(「https://www.facebook.com」).get() - 連接到網絡。將此行移至AsyncTask。 http://www.androidbegin.com/tutorial/android-basic-jsoup-tutorial/。檢查這個鏈接。 – Bob