Uygulamamın bir kullanıcı bir mongodb veritabanını güncelleyerek uygulamayı açtığımda veya kapattığında izleyeceği bir yöntem uygulamaya çalışıyorum. Bir etkinlik başlatıldığında onCreate() veya onResume() yöntemlerinin her zaman başladığını ve bir etkinliğin kapatılmasının onPause() veya onStop() yöntemlerinin çağıracağını anlıyorum. Ben şimdiye kadar denedim neUygulamayı kapatma/başlatma uygulamasında izleme
şudur: i kullanmak
onCreate(), onResume() Onpublic 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;
}
}
yöntemleri:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), false);
Uygulamam ben bu AsyncTask arıyorum her aktivitede
ve OnPause(), OnStop() yöntemleri i kullanın:
ServerRequest serverRequest = new ServerRequest(this);
Profile profile = Profile.getCurrentProfile();
serverRequest.updateOnline(profile.getId(), true);
Bu çalışma olması ve benim belge espri güncelleştirmek gerektiğini düşünüyorum Kullanıcı çevrimiçi/çevrimdışı durum h ama değil. Bu, uygulama arka planda çalışırken AsyncTask'ın çalışmıyor olmasından mı yoksa belki de yanlış bir şey yapıyorum diye merak ediyorum. Neyse, herhangi bir yardım çok takdir edilir.
DÜZENLEME
Log.d() AsyncTask ptints y ancak x. Orada AsyncTask
Sadece benim app aktivitesini değiştirerek test) (OnStop için onCreate() yöntemi için yürütme değil, için. Uygulamamdaki bir etkinliği değiştirdiğimde veya akıllı telefonumun orta düğmesine bastığımda (arka plana gönderirken) çevrimiçi alan veritabanımda güncellenir. Yöntem, yalnızca tamamen kapattığımda çalışmıyor.
Ne 'BasicDBObject' olduğunu görmeden, orada bir sorun olabilir. Ancak, günlüğünüz 'y' bloğuna isabet ediyorsa, ancak 'x' değilse, loginOnline() 'ı, başlamak için giriş için gerçek bir değerle çağırdığınızdan emin misiniz? Uygulamayı hata ayıkladıktan sonra kod satırına adım attınız mı? Her adımda beklediğiniz gibi değişkenlerin değeri miydi? –
Sadece uygulamamdaki etkinliği değiştirerek test oldum.Uygulamamdaki bir etkinliği değiştirdiğimde veya akıllı telefonumun orta düğmesine bastığımda (arka plana gönderirken) çevrimiçi alan veritabanımda güncellenir. Yöntem yalnızca tamamen kapattığımda çalışmıyor –