Je suis nouveau sur le développement Android et j'apprends comment utiliser le modèle MVP correctement récemment.Comment concevoir une classe qui peut transmettre des données à partir du serveur lorsque les données sont finis de téléchargement
Maintenant, je suis confronté à un problème délicat, l'espoir peut obtenir une suggestion utile ou une solution d'ici.
Tout d'abord, voici mon présentateur
public class MVPPresenter {
private MVPView mvpView;
public MVPPresenter(MVPView mvpView) {
this.mvpView = mvpView;
}
public void loadData() {
mvpView.startLoading();
final List<MVPModel> list = new ArrayList<>();
//the part that I trying to extract starts here.
Call call = DataRetriever.getDataByGet(URLCombiner.GET_FRONT_PAGE_ITEMS);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mvpView.errorLoading();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
try {
JSONObject result = new JSONObject(response.body().string());
int errorCode = result.getInt("ErrorCode");
if (errorCode == 0) {
JSONArray value = result.getJSONObject("Value").getJSONArray("hot");
for (int i = 0; i < value.length(); i++) {
MVPModel mvpModel = new MVPModel();
String name = null;
String image = null;
try {
name = value.getJSONObject(i).getString("title");
image = URLCombiner.IP + value.getJSONObject(i).getString("pic");
} catch (JSONException e) {
e.printStackTrace();
}
mvpModel.setName(name);
mvpModel.setImage(image);
list.add(mvpModel);
}
if (list.size() > 0) {
mvpView.successLoading(list);
mvpView.finishLoading();
} else {
mvpView.errorLoading();
}
} else {
mvpView.errorLoading();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
mvpView.errorLoading();
}
}
});
//the part that I trying to extract ends here.
}
}
Comme vous pouvez le voir, je suis en train d'extraire la partie qui utilise OKHttp libs dans une classe (je l'appelle gestionnaire de données) que je l'espère peut gérer chaque tâche entre le serveur et le client. Mais voici la chose, quand j'essaye de passer le résultat du gestionnaire de données au présentateur, j'ai obtenu NullPointException à cause du mécanisme asynchrone.
Je voudrais savoir comment transmettre les données, qui proviennent du serveur en asynchrone, au présentateur lorsque les données ont fini de télécharger.
Et voici mon gestionnaire de données idéal, je sais que cela peut sembler stupide mais je pense que cela peut rendre mon problème plus clair. J'ai lu un article qui pourrait peut-être résoudre mon problème, mais je n'ai toujours pas trouvé de réponse satisfaisante. Peut-être que j'ai utilisé un mauvais mot-clé, je pense. J'espère que vous pourrez me donner des idées ou des solutions pour m'aider ou m'inspirer.
P.S. version de OKhttp libs est 3.7.0
Cela fonctionne comme un charme. Merci pour votre aide: D – Lucian
De rien! Cependant, envisagez de modifier votre conception de sorte que 'getServerData' ne soit pas une méthode statique. Cela rendra votre code plus facile à tester – Pelocho
Merci encore pour votre avis. Je l'ai changé. Très apprécié. – Lucian