J'essaie d'implémenter une méthode où mon application suivra lorsqu'un utilisateur a ouvert ou fermé mon application en mettant à jour une base de données mongodb. Je comprends que lorsqu'une activité démarre, les méthodes onCreate() ou onResume() démarrent toujours et lorsqu'une activité se ferme, les méthodes onPause() ou onStop() appellent.Suivre l'utilisateur lors de la fermeture/démarrage de l'application
Ce que j'ai essayé est jusqu'à présent ceci: dans toutes les activités de ma demande, j'appelle ce AsyncTask:
public void updateOnline(String fbid, boolean login){
new updateOnlineAsync(fbid, login).execute();
}
public class updateOnlineAsync extends AsyncTask<Void, Void, Void>{
String fbid;
boolean login;
public updateOnlineAsync(String fbid, boolean login){
this.fbid=fbid;
this.login=login;
}
@Override
protected Void doInBackground(Void... params) {
BasicDBObject query = new BasicDBObject();
query.put("fbid", this.fbid);
Document myDoc = fb_users.find(query).first();
if(login){
Log.d("...", "x");
Document listItem = new Document("online", "0");
Document updateQuery = new Document("$set", listItem);
fb_users.updateOne(myDoc, updateQuery);
}else{
Log.d("...", "y");
Document listItem = new Document("online", "1");
Document updateQuery = new Document("$set", listItem);
fb_users.updateOne(myDoc, updateQuery);
}
return null;
}
}
Sur les méthodes onCreate(), onResume() i utilise:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), false);
et OnPause(), onStop() méthodes i utilise:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), true);
Je pense que cela devrait fonctionner et mettre à jour mon document d'esprit h la situation en ligne/hors ligne de l'utilisateur, mais ce n'est pas le cas. Je me demande si cela est dû au fait qu'AsyncTask ne fonctionne pas lorsque l'application est en arrière-plan ou que je fais quelque chose de mal. De toute façon toute aide est très appréciée.
EDIT
Log.d() dans AsyncTask ptints y mais pas x. Là pour le AsyncTask s'exécute pour la méthode onCreate(), mais pas pour onStop()
Je viens de tester en changeant d'activité dans mon application. Le champ en ligne est mis à jour dans ma base de données lorsque je modifie une activité dans mon application ou lorsque j'appuie sur le bouton du milieu de mon smartphone (l'envoyer en arrière-plan). La méthode ne fonctionne pas seulement quand je la ferme complètement
Sans voir ce que 'BasicDBObject' est, il pourrait y avoir un problème. Mais si votre journal frappe le bloc 'y' mais pas le 'x', êtes-vous sûr d'appeler 'updateOnline()' avec une vraie valeur pour le login? Avez-vous débogué l'application et parcouru le code ligne par ligne? La valeur des variables était-elle celle que vous attendiez à chaque étape? –
Je viens de tester en changeant d'activité dans mon application.Le champ en ligne est mis à jour dans ma base de données lorsque je modifie une activité dans mon application ou lorsque j'appuie sur le bouton du milieu de mon smartphone (l'envoyer en arrière-plan). La méthode ne fonctionne pas seulement quand je la ferme complètement –