繁体   English   中英

如何将实现的接口对象传递给其实现的类中的方法?

[英]How do I pass an implemented Interface object to a method in the class its implemented in?

我正在进行“登录”活动:

LogInActivty extends AppCompatActivity
 implements LoaderCallbacks<Cursor>, Firebase.AuthResultHandler, Firebase.AuthStateListener

现在我要调用Firebase.authWithPassword(String, String, Firebase.AuthResultHandler); AsynTask<Void, Void, Boolean>.doInBackground(Void...params)

我到底如何将Firebase.AuthResultHandler传递给Firebase.authWithPassword(x,y,a); 无需创建身份验证处理程序? 可能吗? 可以引用auth处理程序值吗?

PS我是Firebase的新手,它试图掌握Java中类的扩展和实现。

我也为此感到挣扎。 我这样做的方式就像你在想; 我创建了AuthHandler接口:

注意:我创建了一个我传递的用户对象

public class FirebaseServerAuthenticate implements ServerAuthenticate, Firebase.AuthResultHandler {

    public static final String TAG = FirebaseServerAuthenticate.class.getSimpleName();

    private ServerAuthenticateCallback callback;
    private User user;

    @Override
    public void userSignIn(User user, ServerAuthenticateCallback callback) {
        Log.d(TAG, "Firebase authentication starting: " + user);
        this.user = user;
        this.callback = callback;

        // I check for id and token here. you may or may not need this. 
        if(isEmpty(user.getAuthToken()) || isEmpty(user.getUid()))
            callback.onServerAuthenticateFail("User provided no auth token");
        else
            FireHelper.getRoot().authWithOAuthToken(AUTH_TOKEN_TYPE_GOOGLE, user.getAuthToken(), this);
    }

    @Override
    public void onAuthenticated(AuthData authData) {
        Log.d(TAG, "Firebase authentication: successful");
        callback.onServerAuthenticated(user);
    }

    @Override
    public void onAuthenticationError(FirebaseError firebaseError) {
        Log.e(TAG, "Firebase authentication: failed");
        callback.onServerAuthenticateFail(firebaseError.getMessage());
    }

}

然后,您需要ServerAuthenticate接口:

public interface ServerAuthenticate {

    interface ServerAuthenticateCallback { 

        void onServerAuthenticated(User user);

        void onServerAuthenticateFail(String error);

    }

    void userSignIn(final User user, ServerAuthenticateCallback callback);

}

要进行身份验证,请在您的活动中使用FirebaseServerAuthenticate.userSignIn

FirebaseServerAuthenticate serverAuthenticate = new FirebaseServerAuthenticate();

public void authenticateUser(User user){
    new AsyncTask<User, Void, Void>() {
            @Override
            protected Void doInBackground(User... params) {
                User user = params[0];
                // I did some more stuff here. Got my auth token from google etc.
                serverAuthenticate.userSignIn(user, new ServerAuthenticate.ServerAuthenticateCallback() {
                   @Override
                   public void onServerAuthenticated(User user) {
                       // Here you are authenticated! 
                       // I kill this activity and open in to my mainActivity
                       finishLogin(user);
                   }

                   @Override
                   public void onServerAuthenticateFail(String error) {
                       // Handle the error. For debug, I just show an alert dialog
                       onError(error);
                   }
               });
                return null;
            }

        }.execute(user);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM