Wie implementiere ich ein Beobachter, um Daten von einem listener?

Ich bin mit dem MaterialDrawer - Bibliothek zum erstellen einer einfachen Schublade für meine app, einige der Instanzen von Klassen in der Bibliothek müssen Sie eine Zeichenfolge übergeben, in Ihnen, wenn Sie aufgerufen. Ein Beispiel ist die IProfile Klasse:

IProfile profile = new ProfileDrawerItem().withName("John Doe");

wo die withName() - Methode nimmt eine Zeichenfolge.

Habe ich eine Klasse MyObservable.java (extends Observable) Klasse, die ich beabsichtige zu bekommen Daten verwendet werden, in meinem MainActivity hat die MaterialDrawer Bibliothek implementiert. In dieser Klasse habe ich eine Methode implementData() hat meine Zuhörer für das, was ich von meinen FB-Datenbank.

Dies ist, wie es aussieht:

    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);
    }
}

Dann ich informieren, mein Beobachter den Benutzernamen zu ändern mit der changeUsername() Methode:

public void changeUsername(String username) {
        this.username = username;

        setChanged();
        notifyObservers(username);
    }

In der MyObservable Klasse, ich habe eine MyObserver Klasse, die Observer mit der update() - Methode aufgerufen, wenn ein Beobachter wurde aktualisiert. In der update() Methode für jetzt, ich Drucke einfach die username des Anwenders, sicherzustellen, dass so etwas tatsächlich geschieht.

Dies ist, wo ich noch die Daten aus dem Beobachter (In der MainActivity):

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);
    }

    ...

}

Habe ich Stunden damit verbracht zu versuchen zu " reagieren", um die Ereignisse in den Hörer, indem Sie versuchen, um Daten abzurufen, die verwendet werden in meiner MainActivity aber ich bin mir nicht sicher, ich bin mit dem Observable/Observer-pattern, richtig, auch da dies ein Asynchrones Ereignis von FB Daten zu erhalten, mit einem Beobachter ist der beste Weg, dies zu tun.

Den appDrawer() - Methode aufgerufen, in der meine Aktivität onCreate() .

Wie kann ich Daten abrufen, die vom Hörer mit einem Beobachter, so kann ich es verwenden, woanders?

InformationsquelleAutor Feyisayo Sonubi | 2016-01-29

Schreibe einen Kommentar