Okhttp3-addHeader小坑记

写在前面

最近感觉自己看了不少东西,不过在上班所以并没有很多的时间来写东西。我有一些半成品不过都不想发出来,毕竟缺少一点自己的东西在里面。好了日常唠嗑(1/1)。

背景

前面也说了最近在上班,接触到的项目里用的都是被抛弃的httpclient,说实话这小项目我觉得我是有能力重构的。所以最近着手重构,重构之前首先选定要拿什么做。经过慎重的思考之后决定:项目尽量采用MVC的模式做,网络请求用okhttp(用hongyang封装的okhttp-utils),图片的处理和加载想采用glide,但是目前来看还有一些问题。好了背景介绍到这,下面说坑。

既然采用Okhttp来重写网络请求,我当然得挑几个出来跑一下试试。这一试问题就出来了,见下图:

error.png

415介质错误,等等,难道我请求写的有问题?好吧,真有可能,可能因为自己平时就粗心大意的。

      OkHttpUtils.postString()
//                .mediaType(MediaType.parse("application/json; charset=utf-8"))
                .content(jo.toString())
                .addHeader("tkn", "--")
                .addHeader("uid", "--")
                .addHeader("Content-Type", "application/json")
                .url(" ")
                .build()
                .execute(new BitmapCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        e.printStackTrace();
                        tvTest.setText("纳尼,竟然会错?");
                    }

                    @Override
                    public void onResponse(Bitmap response, int id) {
                        ivImg.setImageBitmap(response);
                    }
                });

tkn和uid是验证登录的东西,这个东西我肯定是写的没错的,我这个请求我仔细看了一遍也没发现哪出了问题。但错就在那啊!

可能有细心的看官已经发现了,我注释了一行。是的,那一行就是解决问题的方法。在http头里面声明"Content-Type", "application/json"在okhttp里面是没什么卵用的,okhttp中需要在mediaType中声明介质类型。

小结

最近由于工作先后接触了HttpUrlConnection、HttpClient、okhttp,感觉api有的差不多,有的差别很大,关键还是你对于http协议的理解。只要你对http有一定的了解,对于一个有良好设计的东西来说找到对应的api是很容易的。

你可能感兴趣的:(Okhttp3-addHeader小坑记)