2 qq 21272341 qq_21272341 于 2017.01.03 14:35 提问

android Service 网络下载问题

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

if(intent!=null){

        String type=intent.getExtras().getString("type");
        String downloadPath=intent.getExtras().getString("downloadPath");
        String savePath=intent.getExtras().getString("savePath");

        if(type.equals("audio")){



        }else if(type.equals("video")){

            new MyThread(downloadPath, savePath).start();

        }
    }

    return super.onStartCommand(intent, flags, startId);

}


class MyThread extends Thread{

    HttpResponse httpResponse=null;
    InputStream is=null;
    FileOutputStream fos=null;
    long httpEntityLength=-1;
    RandomAccessFile raf=null;

    String downloadPath=null;
    String savePath=null;
    public MyThread(String downloadPath,String savePath) {

        this.downloadPath=downloadPath;
        this.savePath=savePath;

    }

    public void run(){

        try {

            HttpClient httpClient=new DefaultHttpClient();
            HttpPost httpPost=new HttpPost(HttpUrlUtil.WEBSERVER_PATH+downloadPath);
            httpResponse=httpClient.execute(httpPost);
            HttpEntity httpEntity=httpResponse.getEntity();
            BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(httpEntity);
            System.out.println(HttpUrlUtil.WEBSERVER_PATH+downloadPath);
            System.out.println("bufferedHttpEntity"+bufferedHttpEntity.getContentLength());

            is=bufferedHttpEntity.getContent();

            File file=new File(savePath);
            raf=new RandomAccessFile(file, "rwd");
            fos=new FileOutputStream(file);

            if(file.exists()){
                //handle发送此文件已经存在的消息
                if(raf.length()==httpEntityLength){


                    System.out.println("长度相同");

                }else{


                    System.out.println("长度不相同");

                }

            }
            byte buffer[] = new byte[1024];  
            int i = 0; 
            while ((i=is.read(buffer))!=-1) {
                fos.write(buffer, 0, i);

            }
            if(raf.length()==httpEntityLength){

                System.out.println("长度相同");

            }else{
                System.out.println("长度不相同");
            }


        } catch (Exception e) {
            // TODO: handle exception
        }finally{
            try {
                is.close();
                raf.close();
                fos.close();

            } catch (Exception e2) {
                // TODO: handle exception
            }
        }

    }
}
下载地址是对的,但是得到的长度一直都是6277

2个回答

oyljerry
oyljerry   Ds   Rxr 2017.01.03 14:41

查看你的http返回的response code是什么?还有就是打印一下返回的内容。看是什么?可能服务器做了过滤

qq_21272341
qq_21272341 返回的是200,我在Activity里是能正常下载的,但是一样的代码放到Service里就下载不了,你看看会是什么原因,在线等!!!
11 个月之前 回复
Mr_dsw
Mr_dsw   Ds   Rxr 2017.01.04 12:59

httpResponse.getStatusLine().toString()返回的错误码200就是连接url地址成功,然后就可以下载了。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!