读取数据库中登录的用户变量

时间:2018-07-24 09:50:55

标签: java android backendless

是否可以在Backendless用户数据库中读取已登录的用户名,因为某些用户在应用程序登录时应获得不同的首次活动?

Backendless.UserService.login( email, password, true );
            boolean isValidLogin = Backendless.UserService.isValidLogin();
            Log.i( "MYAPP", "[SYNC] Is login valid? - " + isValidLogin );
            AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()
            {
                @Override
                public void handleResponse( Boolean response )
                {
                    //WANT TO TEST THE NAME OF LOGGED IN USER HERE
                    Log.i( "MYAPP", "[ASYNC] Is login valid? - " + response );
                }

                @Override
                public void handleFault(BackendlessFault fault)
                {
                    Log.i( "MYAPP", "Error - " + fault );
                }

            };

3 个答案:

答案 0 :(得分:0)

Try this

 Backendless.UserService.login( email, password,
                new AsyncCallback<BackendlessUser>() {
                    @Override
                    public void handleResponse(BackendlessUser response) {
                           if(response!=null) 
                           //get user logged details
                        BackendlessUser user=Backendless.UserService.CurrentUser();
                        String userId = UserIdStorageFactory.instance().getStorage().get();
                        Toast.makeText(getContext(), "User has been logged in", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void handleFault(BackendlessFault fault) {
                        Toast.makeText(getContext(), fault.getMessage(), Toast.LENGTH_LONG).show();
                    }
                });

答案 1 :(得分:0)

从您的代码来看,您似乎有些困惑。我将尝试分别解释这些概念。

首先,您在登录时将stayLoggedIn参数传递为true。这意味着,如果应用程序的用户关闭该应用程序,然后过一会儿重新打开它,则您无需再次执行登录-自首次登录后,它将保持不变。

第二,使用stayLoggedIn = true参数有一点警告。它在后台仅将user-token值存储在设备上,即使您不再执行登录操作,也可以在应用程序重启后有效地使请求得到授权。但是需要注意的是,由于某些情况,登录名可能会变得无效,例如您将登录名配置为过期还是通过在控制台上切换多个登录名而手动终止。这是当您需要进行isValidLogin()调用时:返回true是存储的令牌仍然有效,否则返回false

我看到的困惑是您在isValidLogin调用之后立即调用login,这没有任何意义-显然是有效的,因为您只是这样做了。正确的流程是先调用isValidLogin,然后再返回 ,然后再执行login。这样可以有效地节省一些登录注销信息,这可能会污染您的分析,并且通常会稍慢一些。

现在,回答您的问题时,通常不需要调用loginisValidLogin来检索当前登录的用户。假设您之前用login调用了stayLoggedIn = true,则只需要获取当前用户的ID,然后使用它来获取用户对象本身。这是执行此操作的代码:

final String currentUserId = UserIdStorageFactory.instance().getStorage().get();
BackendlessUser currentUser = Backendless.Data.of( BackendlessUser.class ).findById( currentUserId );

但是请注意,currentUserId可能是null in case you haven't called登录with stayLoggedIn = true`,在这种情况下,您将必须登录并获得用户响应:

BackendlessUser currentUser = Backendless.UserService.login( "email", "password", true );

当然请记住,在Android中,您必须使用类比异步方法(接受AsyncCallback的方法)或使用AsyncTask或其他任何方法来在主线程之外执行请求。

答案 2 :(得分:0)

这类似于我试图做的,从Backendless文档中得到了这个答案。

 BackendlessUser user = Backendless.UserService.CurrentUser();
  if( user != null )
  {
    // get user's phone number (i.e. custom property)
    String phoneNumber = (String) user.getProperty( "phoneNumber" );
    Toast.makeText( MainActivity.this, 
                    String.format( "phone number: %s", phoneNumber ), 
                    Toast.LENGTH_SHORT ).show();