如何在一个有返回值的方法中进行网络操作,然后返回网络操作后的值?
比如
private String A(){
StringRequest stringRequest=new StringRequest(Request.Method.POST, MyApplication.HOST + "/mobileLogin.do",
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
sout("获取的"+s)
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> map=new HashMap<>();
map.put("msgno","001010");
map.put("uid",s);
return super.getParams();
}
};
requestQueue.add(stringRequest);
}
我想返回这个获取的结果,但是volley的操作是在异步,根本没法return,那这个怎么办
Vous pouvez utiliser le rappel d'interface
Déclarez d'abord une interface
à l'intérieur de la méthodepuis utilisez
Utilisez RxJava ou EventBus
Ensuite, faites-le dans la fonction de rappel asynchrone. Ou transmettez une méthode ou une fonction où le retour asynchrone se produit.
Vous pouvez changer d'avis et vous n'avez pas besoin de renvoyer le résultat dans
volley
. Lorsque la requête réussit, le résultat est encapsulé, par exemple en utilisantList
directement ou en combinaison avec une classe pour le stocker, puis les données et les opérations peuvent en être obtenues via le mécanismeHandler
.Lorsque j'utilise Rongyun, j'ai besoin d'un fournisseur d'informations utilisateur. D'après le stringId passé par sa méthode, j'utilise ensuite cet identifiant pour récupérer les informations correspondant à cet identifiant depuis mon serveur,,, donc il n'y a aucun moyen de fonctionner. volée en premier
RongIM.setUserInfoProvider(nouveau RongIM.UserInfoProvider() {
Vous pouvez utiliser Handler directement
.J'ai relu votre question et elle semble impliquer des rappels multicouches. Je pense que RxAndroid est plus approprié ici
Je viens de commencer et le code que j'ai écrit n'est pas très joli. . . Demander conseil à des experts