Java 正在检查上次登录的用户

Java 正在检查上次登录的用户,java,android,rest,api,Java,Android,Rest,Api,我正在尝试为我的应用程序完成登录屏幕的实现。我有一个RESTAPI后端,它验证用户名+令牌,并返回登录应用程序的用户的用户名。 我想存储登录到应用程序的用户的最后一个用户ID。我计划为此使用共享首选项 根据上次存储的userId,我计划执行转到主活动(如果此用户以前已登录,但在一段时间后注销并重新登录),或者执行AsynkTask以同步后端的一些数据(如果是新用户)。这是我的逻辑,它似乎不能正常工作 它直接切换到MainSyncTask,即使我使用最后一个用户名(userId相同,从API接收)

我正在尝试为我的应用程序完成登录屏幕的实现。我有一个RESTAPI后端,它验证用户名+令牌,并返回登录应用程序的用户的用户名。 我想存储登录到应用程序的用户的最后一个用户ID。我计划为此使用共享首选项

根据上次存储的userId,我计划执行转到主活动(如果此用户以前已登录,但在一段时间后注销并重新登录),或者执行AsynkTask以同步后端的一些数据(如果是新用户)。这是我的逻辑,它似乎不能正常工作


它直接切换到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,而不是在启动新的活动之后完成活动。