任何人都可以帮助我解决我们如何使用公共类进行网络调用,而Volley和Retrofit可以使用这些调用进行极少的更改?所以在未来,如果我必须改为Retrofit或者回到Volley,它应该是可行的。
提前致谢。
答案 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等。