-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Q&A
廖子尧 edited this page Jun 22, 2017
·
7 revisions
如果你的报错日志如下:
那么这个问题是你使用的,mutidex打包导致的,详细解决方案查看这个链接:https://stackoverflow.com/questions/35578135/noclassdeffounderror-for-okhttpclient
如果你不想看,直接看这个截图:
首先,记住任何时候,任何地方,以下这两行设置代码永远不起作用。
headers("Content-Type", "你自己设置的值")
headers("Content-Length", 一个数值)
Content-Type
将遵循以下规则,Content-Length
永远自动根据你上传的内容的真实大小自动添加,不可修改
所有up开头
的方法不能与params()
方法混用,如果混用,将按up方法
的行为来,所有params()
设置的参数将丢失。
以下表格来自OkGO文档的总结:
调用方法 | 对应的Content-Type 值 |
---|---|
upStrig() | text/plain;charset=utf-8 |
upString(string,mediaType) | 值就是你传进来的这个值,只是你只能上传文本数据 |
upJson() | application/json;charset=utf-8 |
upBytes() | application/octet-stream |
upFile() | 1. 会尝试自动根据你的文件后缀名去自动找到最适合他的Content-Type 2. 如果找不到,那么默认使用application/octet-stream
|
upRequestBody() | 这里就是直接上传okhttp原生的RequestBody,你怎么构建的,他就传什么 |
params(string,string) | 如果你的所有params() 方法都是传的字符串,并没有文件,那么默认使用以下值: application/x-www-form-urlencoded
|
params(string,file) | 不论你有多少个params() ,只要有一个传的是File ,那么本次请求就将使用以下值:multipart/form-data; boundary=f6b76bad-0345-4337-b7d8-b362cb1f9949
|
isMultipart(true) | 当你所有的params() 都是字符串,同时你还想你的Content-Type 是multipart/form-data ,那么使用该方法 |
okgo不支持断点下载
okserver支持断点下载
断点上传都不支持,至于为什么,看这里吧:有没有可能加入 断点/分片 上传的功能
下载文件的时候,如果仅仅是读写文件流,客户端是无法知道文件的总大小的,但是服务端可以额外通过Content-Length
头来告诉客户端,如果返回了,那么就是文件的大小,如果不返回,默认就是-1,所以如果你发现进度为-1,请联系服务端返回Content-Length
响应头。