Niedawno zacząłem używać Android Volley w moim projekcie. Wspólna praktyka wspomniano w większości tutoriali jest wykorzystanie go w ten sposób:Biblioteka Android Volley: czy zawsze musimy powtórzyć Response.Listener i Response.ErrorListener
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// do something
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// do something.
}
});
Moje zapytanie jest - Czy musimy powtórzyć ten kod wszędzie tam, gdzie musimy dokonać zamówienia. Starałem się umieścić we wspólnej onResponse i onErrorResponse obsługi tworząc klasę pomocniczą:
public class CustomJSONObjectRequest extends JsonObjectRequest {
private BaseResource resource;
private String queryId;
private String paramArgs;
public CustomJSONObjectRequest(int method, String url, JSONObject
jsonRequest,
Response.Listener<JSONObject> listener,
final Response.ErrorListener errorListener,
final Context ctx,
final BaseResource baseResource) {
super(method, url, jsonRequest,
new Response.Listener<JSONObject>() {
// some common code for all BaseResources
},
new Response.ErrorListener() {
// some common code
});
}
ale problem z tym podejściem jest to, że muszę przejść w każdej rzeczy w samej konstruktora, co czyni czuję, że nie robię tego poprawnie. Na przykład, jeśli muszę przekazać niektóre parametry zapytania dla adresu URL, muszę zawsze przekazywać pełny adres URL od osoby dzwoniącej, chociaż nadal mogę mieć wspólną logikę do generowania adresu URL w jednym miejscu.
Czy ktoś może mi powiedzieć, jaki jest najlepszy sposób osiągnięcia czegoś takiego.
Dzięki za odpowiedź! Kolejne lame zapytanie - czy mogę umieścić wspólną funkcjonalność w metodach interfejsu? Tak więc tylko je zastępuję w razie potrzeby. – pankaj
@pankaj dla metod opcjonalnych, IMO, powinieneś przeczytać [to pytanie] (http://stackoverflow.com/questions/5278013/optional-method-in-java-interface) – BNK
Myślę, że jest nieporozumienie. Moje pytanie dotyczy utrzymania wspólnej procedury onResponse(), więc nie muszę podawać onResponse() we wszystkich działaniach. Nawet z interfejsem muszę zawsze dostarczać niestandardową procedurę obsługi odpowiedzi w działaniach. Czy można nawet myśleć w tym kierunku? – pankaj