Uygulamam için basit bir çekmece oluşturmak için MaterialDrawer kitaplığını kullanıyorum, kitaplıktaki sınıfların bazı örneklerinin çağrıldığında onlara iletilen bir dizeye ihtiyacı var.Bir dinleyiciden veri almak için nasıl bir gözlemci uygularım?
IProfile profile = new ProfileDrawerItem().withName("John Doe");
withName()
yöntem bir dize alır: Bir örnek IProfile
sınıftır.
MaterialDrawer kitaplığına sahip olan MainActivity
adresinde kullanılmak üzere veri almak için kullanmayı amaçladığım bir sınıf MyObservable.java
(Gözlemlenebilir genişler) sınıfı oluşturdum. Bu sınıfta, firebase veritabanımdan ihtiyacım olan şey için dinleyicimi içeren bir implementData()
yöntemim var.
public class MyObservable extends Observable {
// Attach our firebase reference...
Firebase userRef = new Firebase("https://myApp.firebaseio.com/users");
AuthData authData;
public String username = "";
public String email = "";
public void changeUsername(String username) {
this.username = username;
setChanged();
notifyObservers(username);
}
public void implementData(){
// Get the authentication data of our user from the reference.
authData = userRef.getAuth();
// This is the listener I have to get the data from.
userRef.child(authData.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
UserSchema user = snapshot.getValue(UserSchema.class);
// This guy needs to be used in the MainActivity appDrawer() method
String userName = user.getName();
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
class MyObserver implements Observer {
public void update(Observable observable, Object data) {
// For now I just print it out to System.out
System.out.println("Username:" + data);
}
}
Sonra changeUsername()
yöntemi ile kullanıcı adı değişikliği benim gözlemci bildirmek:
Bu
gibi görünüyor ne MyObservable sınıftapublic void changeUsername(String username) {
this.username = username;
setChanged();
notifyObservers(username);
}
, bir MyObserver
sınıfı var Bir gözlemci güncellendiğinde, update()
yöntemi ile Observer
uygular. Şu an için update()
yönteminde, bir şeylerin gerçekte olduğundan emin olmak için kullanıcının username
numarasını yazdım.
I (MainActivity olarak) gözlemciden veri gerek burasıdır:
public class MainActivity extends AppCompatActivity {
...
public void appDrawer(){
IProfile profile = new ProfileDrawerItem()
// I need the user's data here
.withName("Test")
.withEmail("[email protected]")
.withIcon(R.drawable.avatar2);
}
...
}
ben veri almak için deneyerek dinleyici oluyor olaylara ' tepki' çalışırken saat geçirdim Benim AnaAktivitemde kullanacağım ama Gözlemlenebilir/Gözlemci modelini düzgün bir şekilde kullandığımdan emin değilim, bu da Firebase'in veri almak için bir Eşzamansız olayı olduğundan, bir Gözlemci kullanmak bunu yapmanın en iyi yolu olmuştur.
Etkinliğim onCreate()
içinde appDrawer()
yöntemi çağrılır.
Dinleyiciden Verileri bir Gözlemci ile nasıl alırım, başka bir yerde kullanabilir miyim?
'notifyObservers (String) 'changeme' dan() 'aranmalıdır. – cybergen
@cybergen, "olmalı" muhtemelen benim için biraz kısıtlayıcıdır. Kamusaldır, bu yüzden kasıtlı olarak açığa çıkar. Genel durumunda, durumu değiştiren her türlü yöntemde "notifyObservers" ifadesini çağırmak diyebilirim. Senin noktanı görüyorum. OP'nin durumunda, sadece bir tane bildirdiği kadar önemli değil. İzleme keyfiniz için düzenleyeceğim ve böylece OP'nin kodunu daha iyi eşleştireceğim. – ChiefTwoPencils
Oh wow, çok teşekkür ederim, bu yüzden 'changeMe' yönteminin yerine güncellenmekte olan dizgiyi döndürmesini sağlayabilirim ve gözlemcilerin gözlemlenebilir olanın içine eklenmesi gerekmez. –