0

Web サイトから (http 接続を使用して) 画像をダウンロードしようとすると、Android サービスでダウンロードが実行される場合は問題ありませんが、アクティビティからファイルをダウンロードするために同じ方法を試みると、次のエラーが発生します。

11-08 13:27:36.800: W/System.err(8010): android.os.NetworkOnMainThreadException
11-08 13:27:36.800: W/System.err(8010):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077)
11-08 13:27:36.800: W/System.err(8010):     at java.net.InetAddress.lookupHostByName(InetAddress.java:477)
11-08 13:27:36.800: W/System.err(8010):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:277)
11-08 13:27:36.800: W/System.err(8010):     at java.net.InetAddress.getAllByName(InetAddress.java:249)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038)
11-08 13:27:36.800: W/System.err(8010):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:481)
11-08 13:27:36.800: W/System.err(8010):     at java.net.URLConnection.getHeaderFieldInt(URLConnection.java:572)
11-08 13:27:36.800: W/System.err(8010):     at java.net.URLConnection.getContentLength(URLConnection.java:335)

Activity からこの方法でダウンロード メソッドを呼び出す問題を解決しました。

        new Thread(new Runnable() {
        public void run() {
             downloadFile(imagePath);
                }
              }).start();
4

2 に答える 2

2

チェク・ディス

NetworkOnMainThreadException : アプリケーションがメイン スレッドでネットワーク操作を実行しようとしたときにスローされる例外。

asynctask で sendfeedback メソッドを呼び出す必要があります。そうすれば、上記のコードのみが機能します。Web サーバーの応答に時間がかかるため、メイン スレッドが応答しなくなります。それを避けるには、別のスレッドで呼び出す必要があります。したがって、asynctask の方が優れています。

http://android-developers.blogspot.in/2009/05/painless-threading.html

于 2012-11-08T12:47:16.973 に答える
0

このコードを試して、ネットから画像をダウンロードしてください。

String myfeed="your url";

                URL url;
                try {
                    url = new URL(myfeed);
                    InputStream content = (InputStream)url.getContent();
                    d = Drawable.createFromStream(content , "src");

                    Bitmap bitmap = ((BitmapDrawable)d).getBitmap();

                    String path = Images.Media.insertImage(getContentResolver(),bitmap,mImageName, null);
        }catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }   

アクティビティにこれを追加

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy); 
于 2012-11-08T12:48:43.617 に答える