Android BackEnding-测试用户是否仍在登录

Android BackEnding-测试用户是否仍在登录,android,backendless,Android,Backendless,我正在使用backfundle.com作为我的后端。我有一个登录主屏幕: 主活动有一个来自backfundle.com的方法,用于确定用户是否登录。它返回一个布尔语句,并放置在活动的onCreate方法中: AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>() { @Override public void handleResponse

我正在使用backfundle.com作为我的后端。我有一个登录主屏幕:

主活动有一个来自backfundle.com的方法,用于确定用户是否登录。它返回一个布尔语句,并放置在活动的onCreate方法中:

AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };
public class MainActivity extends AppCompatActivity {
private EditText nameInput, passwordInput, emailInput;
private Button register, login;
String name, password, email;
BackendlessUser user = new BackendlessUser();

@Override
protected void onCreate(Bundle savedInstanceState) {
    //NEED METHOD TO CHECK IF USER IS LOGGED IN.
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String appVersion = "v1";
    Backendless.initApp(this, "Blah", "F63A6CC8-4F6E-997D-FF88-1E6ADABFC200", appVersion);

    AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()//THOUGHT THIS MIGHT BE IT BUT DOES NOT PERSIST
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };

    Backendless.UserService.isValidLogin( isValidLoginCallback );

    nameInput = (EditText)findViewById(R.id.nameInput);
    passwordInput = (EditText)findViewById(R.id.passwordInput);
    emailInput = (EditText)findViewById(R.id.emailInput);
    register = (Button) findViewById(R.id.buttonRegister);
    login = (Button) findViewById(R.id.buttonLogin);


    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            name = nameInput.getText().toString();
            password = passwordInput.getText().toString();
            email = emailInput.getText().toString();

            user.setEmail(email);
            user.setProperty("name", name);
            user.setPassword(password);

            Backendless.UserService.register(user, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser registeredUser) {
                    Toast.makeText(getApplicationContext(), "Registered!", Toast.LENGTH_LONG).show();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "Not Registered!" + fault, Toast.LENGTH_LONG).show();
                }
            });

        }
    });

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            email = emailInput.getText().toString();
            password = passwordInput.getText().toString();

            Backendless.UserService.login(email, password, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getApplicationContext(), "Logged In!", Toast.LENGTH_LONG).show();
                    Intent i = new Intent(MainActivity.this, ActivityTwo.class);
                    startActivity(i);
                    finish();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "No Name", Toast.LENGTH_LONG).show();
                }
            });

        }
    });
}}
AsyncCallback isValidLoginCallback=新建AsyncCallback()
{
@凌驾
公共无效句柄响应(布尔响应)
{
Toast.makeText(getApplicationContext(),“登录:”+响应,Toast.LENGTH\u LONG.show();
}
@凌驾
公共无效手柄故障(后端故障故障)
{
Toast.makeText(getApplicationContext(),“登录问题”,Toast.LENGTH_LONG.show();
}
};
当应用程序启动时,布尔值为false。然后用户登录并被带到第二个活动:

AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };
public class MainActivity extends AppCompatActivity {
private EditText nameInput, passwordInput, emailInput;
private Button register, login;
String name, password, email;
BackendlessUser user = new BackendlessUser();

@Override
protected void onCreate(Bundle savedInstanceState) {
    //NEED METHOD TO CHECK IF USER IS LOGGED IN.
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String appVersion = "v1";
    Backendless.initApp(this, "Blah", "F63A6CC8-4F6E-997D-FF88-1E6ADABFC200", appVersion);

    AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()//THOUGHT THIS MIGHT BE IT BUT DOES NOT PERSIST
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };

    Backendless.UserService.isValidLogin( isValidLoginCallback );

    nameInput = (EditText)findViewById(R.id.nameInput);
    passwordInput = (EditText)findViewById(R.id.passwordInput);
    emailInput = (EditText)findViewById(R.id.emailInput);
    register = (Button) findViewById(R.id.buttonRegister);
    login = (Button) findViewById(R.id.buttonLogin);


    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            name = nameInput.getText().toString();
            password = passwordInput.getText().toString();
            email = emailInput.getText().toString();

            user.setEmail(email);
            user.setProperty("name", name);
            user.setPassword(password);

            Backendless.UserService.register(user, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser registeredUser) {
                    Toast.makeText(getApplicationContext(), "Registered!", Toast.LENGTH_LONG).show();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "Not Registered!" + fault, Toast.LENGTH_LONG).show();
                }
            });

        }
    });

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            email = emailInput.getText().toString();
            password = passwordInput.getText().toString();

            Backendless.UserService.login(email, password, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getApplicationContext(), "Logged In!", Toast.LENGTH_LONG).show();
                    Intent i = new Intent(MainActivity.this, ActivityTwo.class);
                    startActivity(i);
                    finish();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "No Name", Toast.LENGTH_LONG).show();
                }
            });

        }
    });
}}
假设用户没有注销,只是关闭了应用程序。当他们重新启动时,我需要应用程序从第二个活动开始,而不是从登录屏幕开始。换句话说,是否存在某种类型的方法来测试用户是否保持登录状态?我原以为是上面的isValidLoginCallBack方法,但是,当我关闭应用程序并重新启动它时,布尔值再次为false。我猜这不是正确的测试方法。我需要一些持久的东西。有人有什么建议吗?多谢各位

以下是第一个活动的完整代码:

AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };
public class MainActivity extends AppCompatActivity {
private EditText nameInput, passwordInput, emailInput;
private Button register, login;
String name, password, email;
BackendlessUser user = new BackendlessUser();

@Override
protected void onCreate(Bundle savedInstanceState) {
    //NEED METHOD TO CHECK IF USER IS LOGGED IN.
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String appVersion = "v1";
    Backendless.initApp(this, "Blah", "F63A6CC8-4F6E-997D-FF88-1E6ADABFC200", appVersion);

    AsyncCallback<Boolean> isValidLoginCallback = new AsyncCallback<Boolean>()//THOUGHT THIS MIGHT BE IT BUT DOES NOT PERSIST
    {
        @Override
        public void handleResponse( Boolean response )
        {
            Toast.makeText(getApplicationContext(), "Logged In: " + response, Toast.LENGTH_LONG).show();
        }

        @Override
        public void handleFault( BackendlessFault fault )
        {
            Toast.makeText(getApplicationContext(), "An Issue Logging In", Toast.LENGTH_LONG).show();
        }

    };

    Backendless.UserService.isValidLogin( isValidLoginCallback );

    nameInput = (EditText)findViewById(R.id.nameInput);
    passwordInput = (EditText)findViewById(R.id.passwordInput);
    emailInput = (EditText)findViewById(R.id.emailInput);
    register = (Button) findViewById(R.id.buttonRegister);
    login = (Button) findViewById(R.id.buttonLogin);


    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            name = nameInput.getText().toString();
            password = passwordInput.getText().toString();
            email = emailInput.getText().toString();

            user.setEmail(email);
            user.setProperty("name", name);
            user.setPassword(password);

            Backendless.UserService.register(user, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser registeredUser) {
                    Toast.makeText(getApplicationContext(), "Registered!", Toast.LENGTH_LONG).show();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "Not Registered!" + fault, Toast.LENGTH_LONG).show();
                }
            });

        }
    });

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            email = emailInput.getText().toString();
            password = passwordInput.getText().toString();

            Backendless.UserService.login(email, password, new AsyncCallback<BackendlessUser>() {
                public void handleResponse(BackendlessUser user) {
                    Toast.makeText(getApplicationContext(), "Logged In!", Toast.LENGTH_LONG).show();
                    Intent i = new Intent(MainActivity.this, ActivityTwo.class);
                    startActivity(i);
                    finish();
                }

                public void handleFault(BackendlessFault fault) {
                    Toast.makeText(getApplicationContext(), "No Name", Toast.LENGTH_LONG).show();
                }
            });

        }
    });
}}
public类MainActivity扩展了AppCompatActivity{
私有编辑文本名称输入、密码输入、电子邮件输入;
私有按钮注册、登录;
字符串名称、密码、电子邮件;
BackendlessUser=新的BackendlessUser();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//需要方法检查用户是否已登录。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串appVersion=“v1”;
backhandle.initApp(这个“废话”,“F63A6CC8-4F6E-997D-FF88-1E6ADABFC200”,appVersion);
AsyncCallback isValidLoginCallback=new AsyncCallback()//本以为可能是这样,但并未持续
{
@凌驾
公共无效句柄响应(布尔响应)
{
Toast.makeText(getApplicationContext(),“登录:”+响应,Toast.LENGTH\u LONG.show();
}
@凌驾
公共无效手柄故障(后端故障故障)
{
Toast.makeText(getApplicationContext(),“登录问题”,Toast.LENGTH_LONG.show();
}
};
back.UserService.isValidLogin(isValidLoginCallback);
nameInput=(EditText)findViewById(R.id.nameInput);
passwordInput=(EditText)findViewById(R.id.passwordInput);
emailInput=(EditText)findViewById(R.id.emailInput);
寄存器=(按钮)findViewById(R.id.buttonRegister);
登录=(按钮)findViewById(R.id.buttonLogin);
register.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
name=nameInput.getText().toString();
password=passwordInput.getText().toString();
email=emailInput.getText().toString();
user.setEmail(email);
user.setProperty(“name”,name);
user.setPassword(密码);
backfundle.UserService.register(用户,新的AsyncCallback(){
公共无效HandlerResponse(后端用户注册用户){
Toast.makeText(getApplicationContext(),“Registered!”,Toast.LENGTH_LONG.show();
}
公共无效手柄故障(后端故障故障){
Toast.makeText(getApplicationContext(),“未注册!”+错误,Toast.LENGTH\u LONG.show();
}
});
}
});
login.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
email=emailInput.getText().toString();
password=passwordInput.getText().toString();
backhandle.UserService.login(电子邮件、密码、新的AsyncCallback(){
public void handleResponse(后端用户){
Toast.makeText(getApplicationContext(),“登录!”,Toast.LENGTH_LONG.show();
意向i=新意向(MainActivity.this、ActivityTwo.class);
星触觉(i);
完成();
}
公共无效手柄故障(后端故障故障){
Toast.makeText(getApplicationContext(),“无名称”,Toast.LENGTH_LONG.show();
}
});
}
});
}}
您可以使用。即使用户关闭应用程序,在共享首选项中存储数据也将是持久的。这是一本书

您也可以使用BackEndingSDK本身来完成这项工作

public void Backendless.UserService.login( String login, 
                                      String password, 
                                      boolean stayLoggedIn, 
                                      AsyncCallback<BackendlessUser> callback );

我刚刚从官方文档中复制了上述代码。

Backfundle已经使用SharedReference在应用程序重启之间存储数据

所以,您需要在重新启动后检索用户。首先,您需要按如下方式登录时设置“stayLoggedIn”选项:
backfundle.UserService.login(“login”,“password”,true)。然后Backfundle将您的用户ID和用户令牌存储在共享prefs中,以便在应用程序重新启动后可以访问

要检查用户令牌是否有效,只需调用
backfundle.UserService.isValidLogin()

获取当前用户objectId请使用
backunfinanced.UserService.loggedInUser()
然后您可以使用
backfundle.Data.findById(…)
将用户作为普通对象抓取

我强烈建议不要使用
backfundle.UserService.CurrentUser()
。此方法不会从SharedReferences检索用户,因此结果可能为空。它不会检查用户是否已登录,因此您可能会获得不一致的用户会话。背景是p