开发移动端应用的时候,当服务端尚不具备服务能力的时候,需要本地模拟API接口数据,这里介绍开发Android应用,并使用Retrofit2框架的时候,如何简单的在本地模拟API数据。
//本地模拟API数据需要的核心类
public abstract class TestCall<T> implements Call<T> {
@Override
public Response<T> execute() throws IOException {
return Response.success(getResponse());
}
public abstract T getResponse();
@Override
public void enqueue(Callback<T> callback) {
try {
callback.onResponse(this, execute());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean isExecuted() {
return false;
}
@Override
public void cancel() {
}
@Override
public boolean isCanceled() {
return false;
}
@Override
public Call<T> clone() {
return null;
}
@Override
public Request request() {
return null;
}
}
// API定义接口
public interface ApiService {
@POST("security/login")
Call<User> login(@Query("username") String account, @Query("password") String password)
}
// 本地模拟API数据的类
public class TestApiService implements ApiService {
@POST("security/login")
Call<User> login(@Query("username") String account, @Query("password") String password) {
return new TestCall<User>() {
@Override
public User getResponse() {
User user = new User("admin","male");
return user;
}
};
}
}
//当服务端不具备能力的时候调用本地数据 否则正常调用
ApiService apiService;
if(localTest){
apiService = new TestApiService();
}else{
apiService = new Retrofit.Builder().baseUrl(API_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(client).build().create(ApiService.class);
}
//正常调用服务接口即可
Call<User> call = apiService.login("test","test");
call.enqueue(...);