2017-05-25 14 views
1

任何人都可以幫助我解決問題:我們如何使用普通的課程進行網絡調用,可以使用Volley和Retrofit進行少量更改?所以在未來,如果我必須改變改造或回到Volley,那應該是可行的。在Android中使用排球和改裝的普通課程

在此先感謝。

+0

爲什麼不只是聲明一個API訪問接口並以兩種特定的方式實現它? –

+0

你能給我一個示例代碼片段 –

+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 /事件總線而不是聽衆,添加線程,記憶等。

+0

謝謝你正在尋找同樣的東西 –