Java 正在检查上次登录的用户
我正在尝试为我的应用程序完成登录屏幕的实现。我有一个RESTAPI后端,它验证用户名+令牌,并返回登录应用程序的用户的用户名。 我想存储登录到应用程序的用户的最后一个用户ID。我计划为此使用共享首选项 根据上次存储的userId,我计划执行转到主活动(如果此用户以前已登录,但在一段时间后注销并重新登录),或者执行AsynkTask以同步后端的一些数据(如果是新用户)。这是我的逻辑,它似乎不能正常工作Java 正在检查上次登录的用户,java,android,rest,api,Java,Android,Rest,Api,我正在尝试为我的应用程序完成登录屏幕的实现。我有一个RESTAPI后端,它验证用户名+令牌,并返回登录应用程序的用户的用户名。 我想存储登录到应用程序的用户的最后一个用户ID。我计划为此使用共享首选项 根据上次存储的userId,我计划执行转到主活动(如果此用户以前已登录,但在一段时间后注销并重新登录),或者执行AsynkTask以同步后端的一些数据(如果是新用户)。这是我的逻辑,它似乎不能正常工作 它直接切换到MainSyncTask,即使我使用最后一个用户名(userId相同,从API接收)
它直接切换到MainSyncTask,即使我使用最后一个用户名(userId相同,从API接收),savedUserId.equals(currentUserId)应该返回true并执行意图。最后一个用户ID正确存储在SharedReferences数据库中,请与Stecho检查
String userId = getUserIdFromAPIResponse();
sharedpreferences = PreferenceManager.getDefaultSharedPreferences(this);
private void checkIdAndGoToActivity() {
final String PREF_VERSION_CODE_KEY = "user_id";
// Get current version code
String currentUserId = userId;
// Get saved version code
String savedUserId = sharedpreferences.getString(PREF_VERSION_CODE_KEY, "");
if (savedUserId.equals(currentUserId)) {
Log.e(TAG, "Current User Logged in");
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
/* destroys activity , prevents user from going back to previous MainActivity after login out */
finish();
} else if (!savedUserId.equals(currentUserId)) {
Log.e(TAG, "New user logged in");
MainSyncTask mainSyncTask = new MainSyncTask(LoginActivity.this, LoginActivity.this, userEmail, userPassword);
mainSyncTask.execute();
SyncEventReceiver.setupAlarm(getApplicationContext());
}
// Update the shared preferences with the current version code
sharedpreferences.edit().putString(PREF_VERSION_CODE_KEY, currentUserId).apply();
}
哪部分不起作用?它直接切换到MainSyncTask,即使我使用最后一个用户名登录(userId相同,从API接收),并且savedUserId.equals(currentUserId)应返回true并执行意图。最后一个用户ID正确存储在SharedReferences数据库中,请与Stecho检查。编辑了我的问题,愚蠢的我,ups。你只是他们是一样的吗?你通过调试器查看过吗?可能是异步问题,您执行该方法的时间太短。我现在检查了调试器。从API检索到的用户ID(currentUserId)很好,id23。它也在共享首选项数据库中,如23所示。但是SharedReferences.getString(PREF_VERSION\u CODE\u KEY,“”);似乎没有检索它,它返回一个空字符串。这似乎就是问题所在。该方法在API的改装响应回调上执行,因此正确检索currentUserId,问题似乎是我在上面写的关于SharedReferences未获取值并返回空值的内容。在执行mainAsyncTask之前,请尝试将当前userid存储在else语句中。另外,你不需要在else之后使用if,也许最好在清单中使用android:noHistory,而不是在启动新的活动之后完成活动。