1. ホーム
  2. android

StrictMode$AndroidBlockGuardPolicy.onNetwork は android.os の下でエラーになります。

2022-02-18 23:33:05

今日、AndroidでhttpClientを使ってWebページの内容を取得しようとしたら、httpClientでエラーが発生しました。

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145), libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84 ), libcore.io.IoBridge.connectErrno(IoBridge.java:127), libcore.io.IoBridge.connect(IoBridge.java:112), java.net.PlainSocketImpl.Connect(iocon), libcore.IoBridge(Iocon), android.os.StrictMode(Iocon), android.os.StrictMode(Iocon), android.os.StrictMode(Iocon), libcore.os.IoBridge(Iocon) connect(PlainSocketImpl.java:192), java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459), java.net.Socket.connect(Socket.java:843), org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119), org.apache.http.impl.conn.Connect(PlainSocketImpl.java:193), java.net.PlainSocket.Connect(PlainSockets.JAVA:193),org.apache.http.Impl.JAVA:193),org.http.Impl.JAVA.JAVA:193) DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144), org.apache.http.impl.conn. AbstractPoolEntry.open(AbstractPoolEntry.java:164), org.apache.http.impl.conn.AbstractPooledConnAdapter.open( AbstractPooledConnAdapter.java:119), org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360), abstractHttpClient.execute(AbstractHttpClient.java:555), org.apache.http.impl.client.AbstractConnAdapter.java.114, org.appache.http.impl.java:164), org.appache.http.impl.java.java.114, org.appache.http.impl.conn.AbstractPoolerry.java:164) .execute(AbstractHttpCl



Androidの神様に聞いてみると、Androidはもはやメインスレッドでネットワークにアクセスすることはできず、別のスレッドを立ち上げてアクセスする必要があることがわかりました。

方法1.

<スパン <スパン ターゲットアピ (Build.VERSION_CODES. ジンジャーブリード )

サプレスリント ( "NewApi" )

公開 静的  文字列getHtmlByUrl(文字列url){。 

StrictMode.ThreadPolicyのpolicy=。

<スパン 新しい  StrictMode.ThreadPolicy.Builder().permitAll().build();

        StrictModeです。 setThreadPolicy (ポリシー)を設定します。

   HttpHost proxy = new HttpHost(PROXY, PROXY_PORT);



   DefaultHttpClient httpClient = new DefaultHttpClient()。

httpClientのアクセスの前に赤で示したコードを追加します。





方法2

javaでスレッドを作成し、スレッド内のhttpClientにアクセスしてネットワークにアクセスします。