美文网首页Android开发经验谈Android知识
如何在接口不通的情况下开发app

如何在接口不通的情况下开发app

作者: X_Sation | 来源:发表于2017-11-25 10:43 被阅读66次

之前在包建强老师的公开课上听过这个思路,一直没有使用,正好最近在家无聊,想要开发一下公司项目,但是想要模拟假数据,于是想起了这个方案

场景

  • 接口访问不通
  • 想要模拟数据(比如模拟已经购买的情况等)

实现

我们项目中通常都会对网络操作进行封装,最后就是:从网络请求到json/xml数据->解析成对象->使用

所以我们可以在网络请求之前拦截到url,并且解析url,根据参数要求,返回提前写死的json数据,之后就可以跳过网络请求这一步了。

具体的实现方案有很多,我就贴一下我的吧

//网络前拦截
public void setUrl(String path, String url) throws Exception {
        this.requestUrl = url;
        boolean cacheExist = true;
        String result = getCacheData(path, url);//从缓存读
        result = MockUtil.getInstance().getData(url);//缓存没有从MockUtil读,这个MockUtil就是用来模拟数据的工具类
        if (TextUtils.isEmpty(result)) {//如果缓存也没有,模拟数据也没有,再请求网络
            cacheExist = false;
            result = NetUtil.readString(url);
        }
        if (!TextUtils.isEmpty(result)) {//解析数据
            parse(path, url, result, cacheExist);
        }
    }
//MockUtil的实现
public  String getData(String url) throws MalformedURLException {
        if (mock) {//是否开启mock,通过它可以一键控制开关,这个开关也可以配在配置文件中,看你需求喽
            return handleData(url);//通过URL来获取数据
        }
        return null;
    }
//通过url返回数据(这里的逻辑是灵活的,怎么搞都行,不外乎就是判断参数,判断地址等,拿假数据也是灵活的,我是放在assert目录下,不同的数据不同的命名)
 private  String handleData(String url) {
        Uri uri = Uri.parse(url);
        if (url.startsWith("http://xx.xx.xx/movielist2.")) {//我这里想要模拟两种数据:这个接口下的数据,如果参数“self”是0返回一种,是1返回另一种
            String self = uri.getQueryParameter("self");
            if (self.equals("0")) {
                return readDataFromFile("noself.json");//通过文件读取文件中的数据,这些数据就是模拟的json串
            } else {
                return readDataFromFile("hasself.json");
            }
        }
        return null;
    }


相关文章

网友评论

    本文标题:如何在接口不通的情况下开发app

    本文链接:https://www.haomeiwen.com/subject/edoqbxtx.html