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个回答

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

qq_21272341
东东坏小子 返回的是200,我在Activity里是能正常下载的,但是一样的代码放到Service里就下载不了,你看看会是什么原因,在线等!!!
接近 4 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问