1.微博share接口
在开始之前,我们先看一下要用到的这个接口:
![img_a64b813f4f69df77f9d5e6ae5c040c9e.png](https://i-blog.csdnimg.cn/blog_migrate/bbe94d777d1c7816c8b0ac222f86c6fa.png)
我们这次是要上传本地图片,可以很明确的知道,除了要用POST方式提交请求,还要采用multipart/form-data编码方式。
那么这个multipart/form-data编码方式是什么呢?我查了许多资料,然而还是不懂。大概意思应该是把数据拼成web的POST结构。想详细了解的同学可以去参考其他大神的资料。
下面,咱们开始教程。
2.获取本地图片文件
通过Intent打开本地图库
![img_c2b79a5ca1c9cdd91e2ea6ffcc47bd77.png](https://i-blog.csdnimg.cn/blog_migrate/bee83290b6f290cd57d9f74ecc91de95.png)
然后通过下面的方法获取图片路径
![img_b444203c14163d37522f269eb2c13cf5.png](https://i-blog.csdnimg.cn/blog_migrate/c2435dd4620a06e647fac59e8c3dda6a.png)
关于怎么获取图片路径我就不细讲了,网上资料很多,也不难。
获取路径后,将其装载入文件中,如图所示
![img_fc818e133b23daea9a9b31844f3c4a1e.png](https://i-blog.csdnimg.cn/blog_migrate/d8545f018f461fba07c05a616937c17d.png)
我获取到的scrPath = /storage/emulated/0/DCIM/P70819-094705.jpg
到此,图片文件的获取结束
3.构造请求体
我之前发纯文本微博时,使用 FormBodybody =newFormBody.Builder() 的形式来构造,
后来发现,带上图片的时候就不行了,我不知道怎么写。
然后采用了RequestBody requestBody =new MultipartBody.Builder()来构造。他们之间的区别我不是很清楚。
但是看源代码,似乎RequestBody更容易实现multipart/form-data编码方式。
![img_f5df65036e550e25d73909275527eb84.png](https://i-blog.csdnimg.cn/blog_migrate/c50c62fe9fb7e5252cd48836cf5de4dd.png)
当我们获取图片文件之后,就可以将其传到任何一个你觉得方便的地方(不传也可以),用于构造请求体。
.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,发送请求
接下来就很简单了,这个和发纯文本的微博差不多。
![img_5cbcdb5a78a79c335df96ed43f4ffdd1.png](https://i-blog.csdnimg.cn/blog_migrate/46c614e42988e028b2c46491ad2ceea3.png)
我最后还用了异步数据处理,来接收返回来的一个statu,当返回的不是错误时,就证明你成功了。
![img_5da7f69d52ee07f0d7365a07a20833e2.png](https://i-blog.csdnimg.cn/blog_migrate/c9251f2b65e8183d2b4baa429d739f83.png)
对应的解析方法我就不粘贴出来了,其实不解析也是可以看的,只是会乱点。
以上就是全部内容。
希望我的分享能让你们少走弯路.
相关参考链接:
http://blog.csdn.net/king866/article/details/52526901
http://blog.csdn.net/android_freshman/article/details/51910937