【问题标题】:Java classes and interface combinationJava类和接口组合
【发布时间】:2020-09-04 11:47:41
【问题描述】:

我正在尝试创建几个 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() 并将接口作为参数。

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

在这里,addOnCompleteListener 正在获取活动和接口的参数,就我而言,我将使用活动参数进行一些工作。

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

【问题讨论】:

    标签: java android oop


    【解决方案1】:

    你可以这样做:

    创建接口:

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

    【讨论】:

      猜你喜欢
      • 2015-01-19
      • 2014-06-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-16
      相关资源
      最近更新 更多