东东坏小子 2017-01-03 06:35 采纳率: 0%
浏览 854

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 2017-01-03 06:41
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?