Java Android - Как вызвать метод onSuccess - PullRequest
0 голосов
/ 28 июня 2018

Я действительно новичок в Java & Andoid, раньше я программировал на Swift.

В настоящее время я кодирую активность реестра, а точнее, кодирую метод добавления пользовательских данных в Cloud Firestore.

В быстром я кодировал что-то вроде этого:

func signupUser(firstname: String, lastname: String, onSuccess: @escaping () -> Void) {

      REF_USERS.document(uid).setData([
         "firstname": firstname,
         // etc..
      ]) { (err) in
         if let err = err {
            print("Error adding document: \(err)")
         } else {
            // THE FUNCTION HERE
            onSuccess()
         }
      }
   }

Я бы хотел использовать тот же метод onSuccess () в Android, но я не знаю, как это сделать ...

Я искал, но ничего не нашел ...

Это мой код без onSuccess ():

public void addNewUser(String firstname, String lastname, String email, Integer gender, String uid, String profileImageUrl){

        Map<String, Object> data = new HashMap<>();
        data.put("firstname", firstname);
        data.put("lastname", lastname);
        data.put("email", email);
        data.put("gender", gender);
        data.put("boxId", "independent");
        data.put("notificationsEnabled", true);
        data.put("profileImageUrl", profileImageUrl);

        mFirebaseFirestore.collection("users").add(data)
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
            @Override
            public void onSuccess(DocumentReference documentReference) {
                Log.d(TAG, "DocumentSnapshot written with ID: " + documentReference.getId());
            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.w(TAG, "Error adding document", e);
                    }
                });

    }

1 Ответ

0 голосов
/ 28 июня 2018

Это называется callback в Java.

Сначала вы определяете интерфейс обратного вызова с требуемыми функциями и вводом.

public interface FooOnSuccessListener {
    void iWantToPassOutAnInteger(int passItOut);
}

Затем, в вашем методе addNewUser, передайте этот интерфейс как imput и вызовите его для передачи ваших данных

public void addNewUser(String someInput, final FooOnSuccessListener listener){

    mFirebaseFirestore.collection("users").add(data).addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
        @Override
        public void onSuccess(DocumentReference documentReference) {
            listener.iWantToPassOutAnInteger(FromYourFirebase.someInteger);
        }
    });

}

Наконец, скажем, ваш addNewUser метод происходит из класса Foo. Затем вы можете сделать что-то вроде:

Foo.addNewUser("some param", new FooOnSuccessListener() {
    @Override
    public void iWantToPassOutAnInteger(int passItOut) {
        //Do something with param passItOut
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...