如何维护离线应用程序的会话 android

How to maintain sessions for offline apps android

是否有一种标准方法来处理 android 应用程序的会话,其中登录只发生一次,并且除了同步外大部分时间都保持离线状态? (对于这个用例,我们将会话定义为应用程序的启动和退出。会话不依赖于登录和注销)

您可以使用 Android 中的共享应用程序首选项来维护您的会话存储, 我在这里分享一个完整的 PreferenceHandler class 我主要在 android 应用程序中使用,

public class PreferenceHelper {

    SharedPreferences preferences;
    Context context;
    Editor editor;
    public static final String PREFERENCES_NAME = "YourApplicationName";

    public PreferenceHelper(Context context) {
        preferences = context.getSharedPreferences(PREFERENCES_NAME,
                Context.MODE_PRIVATE);
    }

    public void addPreference(String key, String value) {
        editor = preferences.edit();
        editor.putString(key, value);
        editor.commit();
    }

    public void addPreference(String key, Set<String> values) {
        editor = preferences.edit();
        editor.putStringSet(key, values);
        editor.commit();
    }

    public void addPreference(String key, int value) {
        editor = preferences.edit();
        editor.putInt(key, value);
        editor.commit();
    }

    public void addPreference(String key, float value) {
        editor = preferences.edit();
        editor.putFloat(key, value);
        editor.commit();
    }

    public void addPreference(String key, boolean value) {
        editor = preferences.edit();
        editor.putBoolean(key, value);
        editor.commit();
    }

    public void addPreference(String key, long value) {
        editor = preferences.edit();
        editor.putLong(key, value);
        editor.commit();
    }

    public void editPreference(String key, String value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public void editPreference(String key, Set<String> value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public void editPreference(String key, int value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public void editPreference(String key, float value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public void editPreference(String key, boolean value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public void editPreference(String key, long value) {
        editor = preferences.edit();
        if (preferences.contains(key)) {
            editor.remove(key);
        }
        addPreference(key, value);
    }

    public String getStringValue(String key) {
        String value = preferences.getString(key, "");
        return value;
    }

    public Set<String> getValues(String key) {
        Set<String> values = preferences.getStringSet(key, null);
        return values;
    }

    public int getIntValue(String key) {
        int value = preferences.getInt(key, -1);
        return value;
    }

    public boolean getBooleanValue(String key) {
        boolean value = preferences.getBoolean(key, false);
        return value;
    }

    public float getFloatValue(String key) {
        float value = preferences.getFloat(key, -1);
        return value;
    }

    public Long getLongValue(String key) {
        Long value = preferences.getLong(key, -1);
        return value;
    }

    public void removeKey(String key) {
        preferences.edit().remove(key);
        preferences.edit().commit();
    }

    public void clearAllPreferences() {
        preferences.edit().clear();
        preferences.edit().commit();
    }
}

要在您的应用程序中调用和使用它,只需创建一个对象 class,

PreferenceHelper preferences=new PreferenceHelper(getApplicationContext());

如果您正在使用 Segments 或任何其他子布局,请使用此方法,

PreferenceHelper preferences = new PreferenceHelper(getActivity().getApplicationContext());

以下是我如何根据我的登录要求使用它的示例

if (preferences.getBooleanValue("is_logged")) {
            preferences
                    .addPreference("last_login", DateHelper.getCurrentDate());
            startActivity(new Intent(this, MainActivity.class));
            finish();
        }

在首选项中设置值我在登录时使用此方法, 在登录方法中使用这个,

preferences.addPreference("is_logged", true);
preferences.addPreference("email", email);
preferences.addPreference("user_name", username);
preferences.addPreference("password", password);
preferences.addPreference("last_login",
DateHelper.getCurrentDate());
int uid = JsonHelper.getReturnID(result);
boolean is_admin, is_manager;
is_admin = JsonHelper.getBoolean(result, "is_admin");
is_manager = JsonHelper.getBoolean(result, "is_manager");
preferences.addPreference("is_admin", is_admin);
preferences.addPreference("is_manager", is_manager);
preferences.addPreference("uid", uid);
String phone, name;
phone = JsonHelper.getStringFromResult(result, "phone");
name = JsonHelper.getStringFromResult(result, "name");
preferences.addPreference("phone", phone);
preferences.addPreference("name", name);
startActivity(new Intent(StartingActivity.this,
MainActivity.class));

希望这能解决您的问题。