MockService 移动端虚拟数据

来源:互联网 发布:中国医科大学网络教育 编辑:程序博客网 时间:2024/05/16 01:12

一 安卓在开发的过程中,由于项目紧迫,可能接口并有写好,而移动迫切需要数据,此  时就需要在移动端模拟虚拟数据,也就是本文的MockService。

二 通常移动端都会与后台约定好返回的Response数据格式,一般使用Json作为返回的结果,比较规范的数据返回格式如下:

JSON 数据格式一

{
    "error": true,
    "errorMessage": "信息获取失败",
    "errorType": 1,
    "result": ""
}

JSON 数据格式二

{
    "error": false,
    "errorMessage": "",
    "errorType": 0,
    "result": "{"city":"Beijing","cityid":"10000"}"
}


这里,error是调用api是否成功,errorType是错误类型(如果成功则为0) errorMessag是错误信息(如果成功则为空) result是返回的结果,(如果失败则返回为空)

所有的JSON都返回了error errorType errorMessage result 四个字段 ,我们定义一个Response实体类,作为所以JSON实体的最外层。

public class Response {    private boolean error;//是否有错误    private int errorType;    //1为Cookie失效    private String errorMessage;//错误信息    private String result;//返回信息    public boolean isError() {        return error;    }    public void setError(boolean error) {        this.error = error;    }    public String getResult() {        return result;    }    public void setResult(String result) {        this.result = result;    }    public int getErrorType() {        return errorType;    }    public void setErrorType(int errorType) {        this.errorType = errorType;    }    public String getErrorMessage() {        return errorMessage;    }    public void setErrorMessage(String errorMessage) {        this.errorMessage = errorMessage;    }}
如果成功返回数据数据存放在result字段中

我使用了反射工程来设计MockService。MockService是一个抽象基类,有一个抽象方法 getJsonData,用于返回 手动生成的Mock数据。

public abstract String getJsonData(boolean flag);

每一个要Mock数据的API接扣 都对应一个继承自MockService的子类,都需要实现各自的getJsonData方法 返回不同的json数据。

public class MockWeatherInfo extends MockService {    Response response;    @Override    public String getJsonData(boolean flag) {        if (flag) {            WeatherInfo weather = new WeatherInfo();            weather.setCity("Beijing");            weather.setCityid("10000");            response = getSuccessResponse();            response.setResult(JSON.toJSONString(weather));        } else {            WeatherInfo weather = new WeatherInfo();            response = getFailResponse(1,"信息获取失败");            response.setResult("");        }        Log.i("error", response.isError() + "");        Log.i("response", response.toString());        return JSON.toJSONString(response);    }}
在具体获取数据的地方  使用反射 找到该类 调用  getJsonData方法 获取 数据

public class MainActivity extends AppCompatActivity {    private TextView tvTest;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tvTest = (TextView) findViewById(R.id.tv_test);        getData(true, "com.example.jieke.mockservicedemo.mockData.MockWeatherInfo");    }    private void getData(boolean flag, String className) {        MockService mockService = null;        String strResponse = null;        try {            mockService = (MockService) Class.forName(className).newInstance();            strResponse = mockService.getJsonData(flag);        } catch (InstantiationException e) {            e.printStackTrace();            strResponse = "";        } catch (IllegalAccessException e) {            e.printStackTrace();            strResponse = "";        } catch (ClassNotFoundException e) {            e.printStackTrace();            strResponse = "";        }        Log.i("strResponse", strResponse);        tvTest.setText(strResponse);    }}
分析以上代码  运用到三点  技术 

1  反射  2 FastJosn的toString 3抽象类 具体实现方法 

三 源码地址  http://download.csdn.net/detail/qq_33553515/9671701

0 0