public class getString {
String tag_string_req = "string_raq";
String url = "http://10.0.2.2/eat/locations/index.json";
String result="";
public String get_String() {
StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
result=response;
System.out.println(response);
;
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
System.out.println(volleyError.getMessage());
}
});
AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
return result;
}}
Je voudrais construire un objet de getString et appeler get_String dans d'autres champs. Mais il semble qu'il soit difficile d'obtenir le résultat de onResponse. Je sais que cela ne peut pas fonctionner de la manière actuelle. Quelqu'un pourrait-il m'aider à régler ce problème?
Vous voulez utiliser des interfaces de rappel comme ceci:
public void getString(final VolleyCallback callback) {
StringRequest strReq = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
... // (optionally) some manipulation of the response
callback.onSuccess(response);
}
}...
}}
Où le rappel est défini comme
public interface VolleyCallback{
void onSuccess(String result);
}
Exemple de code dans l'activité:
public void onResume(){
super.onResume();
getString(new VolleyCallback(){
@Override
public void onSuccess(String result){
... //do stuff here
}
});
}
Vous pouvez également rendre VolleyCallback
plus robuste, en utilisant des types génériques si vous souhaitez effectuer un traitement, ou en ajoutant start()
, failed(Exception e)
, complete()
, etc. méthodes pour faire un peu plus fine vérification d'état.
N'oubliez pas qu'il s'agit d'un appel asynchrone. Vous devrez donc mettre à jour les vues, etc. lorsque vous récupérerez le résultat (dans success()
).