2016-11-19 118 views
7

改造2 RequestBody的writeTo()调用两次方法,这是我使用的代码如下:改造2 RequestBody的writeTo()方法调用了两次

ProgressRequestBody requestVideoFile = new ProgressRequestBody(videoFile, new ProgressRequestBody.UploadCallbacks() { 

    VideoUploadStore store = new VideoUploadStore(); 

    @Override 
    public void onProgressUpdate(int percentage) { 
     if (!mIsCancelled) { 
      Log.i("UploadServiceManager", "Read Percentage : " + percentage); 
      data.setUploadPercentage(percentage); 
      store.updateUploadData(data); 
     } 
    } 

    @Override 
    public void onError() { 
     if(!mIsCancelled) { 
      data.setUploadPercentage(0); 
      store.updateUploadData(data); 
     } 
    } 

    @Override 
    public void onFinish() { 

    } 
}); 
MultipartBody.Part multipartVideo = MultipartBody.Part.createFormData("File", videoFile.getName(), requestVideoFile); 
+0

能否请你说明这个问题吗? – primfaktor

回答

10

下面的解决方案可能会帮助你,尽管它可能是太晚了。 :p

删除HttpLoggingInterceptor您的Api Client中的对象不会执行writeTo()函数两次。基本上,HttpLoggingInterceptor通过调用writeTo()首先加载数据缓冲区(用于内部日志记录目的),然后再调用writeTo()上传数据到服务器。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); 
    logging.setLevel(HttpLoggingInterceptor.Level.BODY); 
    httpClient.addInterceptor(logging); 
+0

我刚刚评论我的日志拦截器,它的工作原理,谢谢你的答案和解释。 –

0

降低日志级别从身体到标题,基本或无解决了这个问题对我来说