r12*_*597 2 upload android retrofit
对不起我的英语不好。我尝试在服务器上上传大型视频文件,此文件超过50 mb。当我上传小文件时,一切正常。在清单中,我设置了它android:largeHeap="true"并android:hardwareAccelerated="false"没有帮助我。下面是我的代码:
接口
@Multipart
@POST("/api/upload")
Observable<UploadVideoResponse> uploadVideo(@Header("Authorization") String userToken,
@Part MultipartBody.Part video);
Run Code Online (Sandbox Code Playgroud)
方法返回文件:
public static MultipartBody.Part getMultipartVideoBody(String pathVideo) {
try {
File videoFile = getFile(pathVideo);
RequestBody videoBody = RequestBody.create(MediaType.parse("video/*"), videoFile);
String fileName = videoFile.getName();
return MultipartBody.Part.createFormData("video", fileName, videoBody);
}catch (Exception e){
Log.e("File ", e.getMessage());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在服务器上上传方法
new DefaultApi().uploadVideo(
Utils.getHeaderToken(),
Utils.getMultipartVideoBody(pathVideo)
).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(videoView::showLoading)
.doOnTerminate(videoView::hideLoading)
.subscribe(data -> {
videoView.setData(data);
}
, throwable -> {
}
);
}
Run Code Online (Sandbox Code Playgroud)
错误:
抛出OutOfMemoryError“未能分配100390006字节分配,其中16777216个空闲字节和92MB直到OOM”
完整的堆栈跟踪
09-11 03:53:00.571 6724-6976 / des.brain.ga E / art:抛出OutOfMemoryError“无法分配100390006字节分配,其中16777216个空闲字节和92MB直到OOM” 09-11 03:53:00.573 6724- 6976 / des.brain.ga E / AndroidRuntime:致命例外:RxIoScheduler-3进程:des.brain.ga,PID:6724 java.lang.IllegalStateException:在Scheduler.Worker线程上引发了致命异常。在rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:59)在java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:422)在java.util.concurrent.FutureTask.run(FutureTask.java :237),位于java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:152),位于java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask。
记录拦截器
public final class LoggingInterceptor implements Interceptor {
private final Interceptor mLoggingInterceptor;
private LoggingInterceptor() {
mLoggingInterceptor = new HttpLoggingInterceptor()
//.setLogLevel(RestAdapter.LogLevel.FULL)
.setLevel(BuildConfig.DEBUG ? Level.BODY : Level.NONE);
}
@NonNull
public static Interceptor create() {
return new LoggingInterceptor();
}
@Override
public Response intercept(Chain chain) throws IOException {
return mLoggingInterceptor.intercept(chain);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样使用LoggingInterceptor:
return new OkHttpClient.Builder()
.connectTimeout(300, TimeUnit.SECONDS)
.addInterceptor(LoggingInterceptor.create())
.addInterceptor(logging)
.build();
Run Code Online (Sandbox Code Playgroud)
小智 5
使用改型上载大型视频时,我也遇到了相同的错误,但是删除
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
或设置NONE
对我来说是可行的。
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |