Java 类和接口(interface)组合

标签 java android oop

我正在尝试创建几个 Java 类来执行某些工作。假设我想通过这样调用我的类来完成任务:

FirebaseAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // ...
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });

我最多能理解 signInWithCredential()。我不知道如何实现 addOnCompleteListener() 并将接口(interface)作为参数。

我目前已经使用 getInstance () 和 signInWithCredential() 等方法创建了我的顶级类,如 FirebaseAuth。另外,我尝试创建一个接口(interface),但我收到错误消息,该接口(interface)的结果从未被使用过。如何实现addOnCompleteListener(参数1,接口(interface)2)的样式。

在这里,addOnCompleteListener 正在获取 Activity 和界面的参数,在我的例子中,我将使用 Activity 参数进行一些工作。

P.S: 我发现这叫做接口(interface)回调。如果它是正确的,任何对其结构的指导都会很棒

最佳答案

你可以这样做:

创建接口(interface):

public interface onCompleteListener {
    void onComplete(MyTask object);
}

定义您的 MyTask 类:

public abstract class MyTask {

    public abstract boolean someFunc1();

    public abstract String someFunc2();

    public abstract String someFunc3();

}

在你的主类中:

public class MainClass{

    public static MainClass instance;
    private static Activity mActivity;
    public onCompleteListener onCompleteListener;


    private MainClass(Activity activity) {
        mActivity = activity;
    }

    public static synchronized MainClass getInstance(Activity activity) {
        if (instance == null) {
            instance = new MainClass(activity);
        }
        return instance;
    }

    public void addOnCompleteListener(@NonNull onCompleteListener var2) {
        onCompleteListener = var2;
        //Call your task function
        doTask();
    }

    public void doTask(){
        MyTask o = new MyTask() {
            @Override
            public boolean someFunc1() {
                return true;
            }

            @Override
            public String someFunc2() {
                return "";
            }

            @Override
            public String someFunc3 {
                return "";
            }
        };
        //Once done, pass your Task object to the interface.
        onCompleteListener.onComplete(o);
    }

}

用法:

MainClass.getInstance(MainActivity.this).addOnCompleteListener(new onCompleteListener() {
            @Override
            public void onComplete(MyTask object) {
                doYourWork(object);
            }
        });

关于Java 类和接口(interface)组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63740596/

相关文章:

android - 如何更改抽屉导航中包含菜单的项目的项目标题字体颜色

java - 我可以在构造函数之前调用方法吗

java - 我如何编写一个方法来成对地切换值的顺序

java - 如何在java应用程序中显示html?

android - Android L RecyclerView 的挑战

android - 适用于 iOS/Android 的 AWS 移动开发工具包中内置网络的安全性如何?

java - ManyToOne 未持久化

c++ - 使用空默认构造函数时成员中存在垃圾值的问题

php - Magento 在哪里设置报价项目的价格?

Java 私有(private)静态最终字段和匿名内部类与 Kotlin const val 和对象表达式/声明