okhttp-OkGo icon indicating copy to clipboard operation
okhttp-OkGo copied to clipboard

上传文件的时候,progress.request为空

Open raojh opened this issue 4 years ago • 1 comments

运行了demo以后,进入app,进入OkUpload也没,开始上传文件,文件上传未完成的时候,退出APP,然后再进入APP,进入上传中任务,这个时候会闪退,看代码是UploadAdapter中的下一段代码报错:

`

 for (UploadTask<?> task : values) {
        //noinspection unchecked
        Request<String, ? extends Request> request = (Request<String, ? extends Request>) task.progress.request;
        request.converter(new StringConvert());
    }`

上面的request为空,我把okgo.db文件拿出来看了,progress.request的数据是保存到数据库里面的,不知道是不是Progress.java里面的这段代码没有把数据库中的数据解析出来:

progress.request = (Request<?, ? extends Request>) IOUtils.toObject(cursor.getBlob(cursor.getColumnIndex(Progress.REQUEST)));

我断点查看了,这个时候request确实为null,有没有大佬帮忙分析一下,为什么request会是空的?

raojh avatar Jan 08 '21 10:01 raojh

上传过程中,后台干掉app进程,会导致上传中的任务无法正常保存到数据库,再次启动app从数据库中恢复上传任务的时候,task.progress.request就为空了,这个时候request.converter(new StringConvert());就会空指针闪退。

目前我自己做的解决方案是,从数据库中恢复任务的时候,利用extra保存相关数据,然后利用这些数据重新创建request,这样就可以恢复上传了。

raojh avatar Jan 14 '21 02:01 raojh