Okhttp 使用实例

       一个实际使用Okhttp的例子,弄明白了应该是可以直接用到实际应用中去的。我也是从一个用到的项目中摘出来的,保证了同一时刻只有一个http的请求。

代码下载地址

代码的简单说明

两个module mobile,okhttpuselibrary。主要的工作都是在okhttpuselibrary中做的。
- ProtocolManager类。
Okhttp 使用实例_第1张图片

IOkhttpManager类中定义了我们在整个应用中所有要实现的http的请求(代码里面我只是写了一个简单的请求,通过geit去请求http://192.168.11.1/goform/AppSwitchOTT?type=get的返回值)。ProtocolManager中会实现我们所有的请求组合Url,解析得到的返回值。例如

    @Override
    public SwitchState getSwitchState() throws ResponseError {
        SwitchStateUrl url = SwitchStateUrl.getSTBStatus("http://192.168.11.1/goform");
        return httpInteractForeground(url, new SwitchStateParse());
    }

这个请求是通过SwitchStateUrl去组合get请求,通过SwitchStateParse去解析我们的请求。
ProtocolManager 中http请求的时候我们用到了Future等待到获取返回结果,用到了ExecutorService单线程池保证同一时刻只有一个请求(用了一个扩展的ExecutorService可以设置优先级因为在http请求的时候我们肯定希望前台Foreground的请求的优先级要高,后台Background的优先级要低)。具体的可以参照代码来看哦。

  • ProtocolClient类调用okhttp库中的方法通过get,post方法处理相应的数据。(这里只用到了execute同步的方法)

  • UrlBuilder Url组合的父类,每个请求的Url都要从这个类继承。

  • AbsJSONParser json解析的父类,每个请求的解析都要从这个类继承。

哎,其他的类的作用可以直接看代码。

在代码中我只是做了一个请求只是用来测试用的,一个应用中肯定不能只有一个请求的,所以要改的地方是okhttpuselibrary工程com.vae.wuyunxing.okhttpuselibrary.protocols.parse增加对应请求的json解析类(可以参考SwitchStateParse类的实现),com.vae.wuyunxing.okhttpuselibrary.protocols.url中加对应请求的Url的组和类(可以参考SwitchStateUrl类的实现)。这样请求的Url有了,请求到的数据的解析我们有了,剩下的就是在哪里实现了IOkhttpManager类中写接口(参考IOkhttpManager类中的getSwitchState),然后ProtocolManager类中实现他(参考ProtocolManager类中getSwitchState的写法)。实现有剩下就是只要能调用就可以了参考getSwitchState调用的地方。

                /** only for text okhttp */
                Task.callInBackground(new Callable() {
                    @Override
                    public Void call() throws Exception {
                        IOkhttpManager okhttpManager = MobileApplication.getInstance().getOkhttpManager();
                        okhttpManager.getSwitchState();
                        return null;
                    }
                });

注意:如果按照给的代码中的写法请求的是阻塞的要在线程中调用不能在UI线程中调用哦。可以使用bolts task库(Android 下的 bolts tasks)。

因为在Application里面就绑定了ProtocolManager这样就可以随时调用http请求。先通过MobileApplication.getInstance().getOkhttpManager();得到IOkhttpManager。在通过IOkhttpManager去调用我们定义的请求。不管在哪个Activity中都可以这样调用。
(注意AndroidManifest.xml文件中申明网络权限,和注册ProtocolManager)。

你可能感兴趣的:(Android)