本文主要是介绍retrofit + okhttp 数组 +header+ post + body[params],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
很辛苦,搞定实际上是因为基础确实落下了很多,加上retrofit的body讲解太少,翻墙看了很多资料,最终,解决,给各位分享下代码,互相学习;
1.需求:添加header,并且数组进行post传参,@body
api代码:
@POST("void") Call<Bean> getbean( @Header("a") String a ,@Header("b") String b, @Body() HashMap<String,ArrayList<String>> params);
代码请求:
首先声明:HashMap<String,ArrayList<String>> list_abc = new HashMap<>();
ArrayList<String>al1=new ArrayList<String>(); for(int i = 0 ; i < list.size() ; i ++){ al1.add(list.get(i).getparams); list_abc.put("param",al1); } Call<Devicebean> calldevice = apiStores().getDevices(a,b ,list_abc); calldevice.enqueue(new RetrofitCallback<Devicebean>() { @Override public void onSuccess(Devicebean model) { Log.d("device",""+"device"+model.getCode()); } @Override public void onFailure(int code, String msg) { Log.d("device","code:"+code+"msg"+msg.toString()); } @Override public void onThrowable(Throwable t) { Log.d("device","throwable"+t.toString()); } @Override public void onFinish() { Log.d("device","finish"); } }); }
在请求过程中,使用抓包工具:Fldder,手机APP请求情况
ok,成功,代码其实简单,就是没用body传输数组;
但是你觉得这样就结束了吗?不是,来自:
@Override public void onThrowable(Throwable t) { Log.d("device","throwable"+t.toString()); }
c出现:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected an int but was BEGIN_ARRAY at line 1 column 126 path $.result[0].value[1].value
没把我气吐血
问题描述是:需要array,但是却是int格式
后来跟后台交流才发现,这个键值对的数据类型可以为int或者array,于是我抽了根烟,写上object;
这篇关于retrofit + okhttp 数组 +header+ post + body[params]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!