1.微博share接口
在开始之前,我们先看一下要用到的这个接口:
我们这次是要上传本地图片,可以很明确的知道,除了要用POST方式提交请求,还要采用multipart/form-data编码方式。
那么这个multipart/form-data编码方式是什么呢?我查了许多资料,然而还是不懂。大概意思应该是把数据拼成web的POST结构。想详细了解的同学可以去参考其他大神的资料。
下面,咱们开始教程。
2.获取本地图片文件
通过Intent打开本地图库
然后通过下面的方法获取图片路径
关于怎么获取图片路径我就不细讲了,网上资料很多,也不难。
获取路径后,将其装载入文件中,如图所示
我获取到的scrPath = /storage/emulated/0/DCIM/P70819-094705.jpg
到此,图片文件的获取结束
3.构造请求体
我之前发纯文本微博时,使用 FormBodybody =newFormBody.Builder() 的形式来构造,
后来发现,带上图片的时候就不行了,我不知道怎么写。
然后采用了RequestBody requestBody =new MultipartBody.Builder()来构造。他们之间的区别我不是很清楚。
但是看源代码,似乎RequestBody更容易实现multipart/form-data编码方式。
当我们获取图片文件之后,就可以将其传到任何一个你觉得方便的地方(不传也可以),用于构造请求体。
.setType(MultipartBody.FORM)
这一句一定不能少,我也不知道为什么,少了之后服务器会说不是multipart/form-data编码方式。
然后如果是参数,使用.addFormDataPart()
如果是图片文件,使用addPart()
我还是附上代码,方便复制。
RequestBodyrequestBody;
requestBody =newMultipartBody.Builder()
.setType(MultipartBody.FORM)//请求的类型,貌似也叫请求头吧....
.addFormDataPart("access_token", access_token)//参数1
.addFormDataPart("status", statuContent+"http://www.mob.com/downloads/")//参数2
.addPart(
Headers.of("Content-Disposition","form-data; name=\"pic\"; filename=\""+"pic.jpg"+"\""),
RequestBody.create(null, file))//图片文件
.build();
4.构造Request,发送请求
接下来就很简单了,这个和发纯文本的微博差不多。
我最后还用了异步数据处理,来接收返回来的一个statu,当返回的不是错误时,就证明你成功了。
对应的解析方法我就不粘贴出来了,其实不解析也是可以看的,只是会乱点。
以上就是全部内容。
希望我的分享能让你们少走弯路.
相关参考链接:
http://blog.csdn.net/king866/article/details/52526901
http://blog.csdn.net/android_freshman/article/details/51910937