为了账号安全,请及时绑定邮箱和手机立即绑定

老师,我的程序能运行,但无法下载图片,logcat也不报错

//源码如下:
public class Download {
    private Handler handler;
    public Download(Handler handler){
        this.handler = handler;
    }
    //创建线程池
    private Executor threadPool =Executors.newFixedThreadPool(3);
    
    static class DownloadRunnable implements Runnable{
        
        private String url;
        private String fileName;
        private long start;
        private long end;
        private Handler handler;
        
        public DownloadRunnable(String url,String fileName,long start,long end,Handler handler){
            this.url = url;
            this.fileName = fileName;
            this.start = start;
            this.end = end;
            this.handler = handler;
        }
        @Override
        public void run() {
            try {
                URL httpUrl = new URL(url);
                HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
                conn.setReadTimeout(5000);
                conn.setRequestProperty("Range", "bytes="+start+"-"+end);
                conn.setRequestMethod("GET");
                RandomAccessFile access = new RandomAccessFile(new File(fileName),"rwd");
                access.seek(start);
                InputStream in = conn.getInputStream();
                byte[]  b = new byte[1024*4];
                int len=0;
                while((len = in.read(b))!=-1){
                    access.write(b, 0, len);
                }
                
                if(access!=null){
                    access.close();
                }
                if(in!=null){
                    in.close();
                }
                
                Message msg = new Message();
                msg.what = 1;
                handler.sendMessage(msg);
                
                
            } catch (Exception e) {
            }
            
        }
        
    }
    
    
    public void downloadFile(String url){
        try {
            URL httpUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
            conn.setReadTimeout(5000);
            conn.setRequestMethod("GET");
            int count = conn.getContentLength();
            int block = count/3;
            
            String fileName = getFileName(url);
            File parent = Environment.getExternalStorageDirectory();
            File fileDownload = new File(parent,fileName);
            
            /**
             * 此算法为每个线程分配下载的文件量,其中最后一个线程下载剩下的全部文件
             * 文件块从0开始算起
             */
            for(int i=0;i<3;i++){
                long start = i*block;
                long end = (i+1)*block-1;
                if(i==2){
                    end = count;
                }
                DownloadRunnable runnable = new DownloadRunnable(url,fileDownload.getAbsolutePath(),start,end,handler);
                threadPool.execute(runnable);
            }
            
            
        } catch (Exception e) {
        }
    }
    public String getFileName(String url){
        return url.substring(url.lastIndexOf("/")+1);
    }
}
//activity类
public class DownloadActivity extends Activity {

    private Button button;
    private TextView textView;
    private int count = 0;
    
    private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            int result = msg.what;
            count+=result;
            if(count==3){
                textView.setText("下载成功");
            }
        };
    };
    
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.down);
        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.textView);
        
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                new Thread(){
                    @Override
                    public void run() {
                        Download load = new Download(handler);
                        String url = "http://192.168.124.1:8080/PostTest/c.jpg";
                        load.downloadFile(url);
                    }
                }.start();
                Toast.makeText(DownloadActivity.this, Environment.getExternalStorageDirectory().toString(), Toast.LENGTH_LONG).show();
                
                
            
            }
        });
    }
}

实在是不知道哪里错了。。。。

正在回答

4 回答

莫名喜感。。。。。。。。。。。虽然这错误我也常犯


0 回复 有任何疑惑可以回复我~
#1

sdfr 提问者

是啊,哈哈
2016-07-29 回复 有任何疑惑可以回复我~

我也是一样

0 回复 有任何疑惑可以回复我~

查出来了,是没有添加写文件权限

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2 回复 有任何疑惑可以回复我~

有人说版本问题。。。我试了sdk9 和sdk21都不行。。。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android中的Http通信
  • 参与学习       64671    人
  • 解答问题       306    个

了解Android-http网络编程应用,常见忘了请求相关应用

进入课程

老师,我的程序能运行,但无法下载图片,logcat也不报错

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信