我正在尝试创建几个 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/