在Android中用于Volley和Retrofit的公共类

时间:2017-05-25 06:08:18

标签: android android-volley retrofit

任何人都可以帮助我解决我们如何使用公共类进行网络调用,而Volley和Retrofit可以使用这些调用进行极少的更改?所以在未来,如果我必须改为Retrofit或者回到Volley,它应该是可行的。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你在谈论一个包装类。

基本上,您需要为网络呼叫创建合同。您必须定义要发送的参数类型,要获取的数据量以及要使用的回调系统类型。您不应该在此级别使用任何Volley / Retrofit类,以便能够切换内容。每当您需要将应用程序与任何框架分离时,这种方法都很有用,无论是为了安全(您的实际考虑),还是测试等等。让我们看一个例子:

public class Request<X>{

protected HashMap<String, String> headers;
protected HashMap<String, String> queryParams;
protected X body;
private String url;

//manage fields

}

public class Response<X> extends Request<X>{

private int statusCode;

//manage fields

}

public class restApi{

public interface OnRestOperation<X>{
void onSuccess(Response<X> operation);
void onServerFailure(Response<X> operation);
void onClientFailure(Response<X> operation)
}

public interface NetworkLayer{
void makeCall(Request<X> request, Map<String, OnRestOperation> listeners);
void removeListener(String listenerName);
}

private HashMap<String, OnRestOperation> listeners;
private NetworkLayer networkLayer;

public restApi(NetworkLayer networkLayer){
this.networkLayer = networkLayer;
}

public restApi setNetworkLayer(NetworkLayer networkLayer){
this.networkLayer = networkLayer;
return this;
}

public void call(Request<X> request, OnRestOperation<X> aListener, String listenerName){
listeners.put(getListenerName(request), aListener);
networkLayer.makeCall(request, listeners);
}

public deleteListener(String listenerName){
listeners.remove(listenerName);
networkLayer.removeListener(listenerName);
}

}

NetworkLayer是改造/排球/应该实施的任何地方。显然你可以使用Rx / eventbus而不是监听器,添加线程,memoization等。