【问题标题】:Error download file from Activity从 Activity 下载文件时出错
【发布时间】:2012-11-08 12:45:15
【问题描述】:

如果我尝试从网站下载图像(使用 http 连接),如果下载是在我的 android 服务中执行的,我没有问题,而如果我尝试从 Activity 下载文件的相同方法,则会出现此错误:

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();

【问题讨论】:

    标签: android service android-activity download android-service


    【解决方案1】:

    看看这个

    NetworkOnMainThreadException:当应用程序尝试在其主线程上执行网络操作时引发的异常。

    您应该在 asynctask 上调用 sendfeedback 方法,然后只有上面的代码才能工作。由于网络服务器需要大量时间来响应主线程变得无响应。为避免它,您应该在另一个线程上调用它。因此 asynctask 更好。

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

    【讨论】:

    • 现在我只有一个问题:我希望我的主线程在继续执行之前等待下载。我能做什么?
    【解决方案2】:

    试试这个代码从网上下载图片。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多