MockService 移动端虚拟数据

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

你可能感兴趣的:(Android—工具类)