2017-05-25 1 views
1

Quelqu'un peut-il m'aider sur la façon dont nous pouvons utiliser une classe commune pour les appels réseau qui peuvent être utilisés par Volley et Retrofit avec quelques changements minimes? Alors que dans l'avenir, si je dois changer à Retrofit ou revenir à Volley, il devrait être possible.Classe commune à utiliser pour Volley et Retrofit dans Android

Merci d'avance.

+0

Pourquoi ne pas simplement déclarer une interface d'accès API et l'implémenter de deux manières spécifiques? –

+0

pouvez-vous me donner un exemple avec l'extrait de code –

+0

Ceci est un problème de conception trivial. –

Répondre

2

Vous parlez d'une classe wrapper.

Fondamentalement, vous devez créer un contrat pour les appels réseau. Vous devrez définir le type de paramètres que vous allez envoyer, le volume de données que vous allez recevoir et le type de système de rappel que vous allez utiliser. Vous ne devriez pas utiliser de classe Volley/Retrofit à ce niveau afin de pouvoir changer les choses. ce type d'approche est chaque fois utile, vous devrez peut-être découpler votre application de tout cadre, que ce soit pour la sécurité (votre préoccupation réelle), les tests, etc. Voyons un exemple:

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 est où retrofit/volley/tout ce qui devrait être mis en œuvre. Évidemment, vous pouvez utiliser Rx/eventbus à la place des écouteurs, ajouter des threads, mémo, etc.

+0

Merci regardait dehors pour le même –