У меня есть список магазинов, которые я получаю от API. Каждый из них имеет разные идентификаторы и имя (вместе с другими параметрами). Пользователи могут войти в каждый из них, и когда они это сделают, они должны оставаться в системе, несмотря ни на что, до тех пор, пока они не выйдут из системы в конце концов. Я думал о том, чтобы сохранить номер/идентификатор магазина в SharedPreferences и зарегистрировать пользователя. Затем, когда я проверяю, вошел ли пользователь в систему, я проверяю, совпадает ли номер магазина, сохраненный в SharedPreferences, с номер/идентификатор магазина, в котором они сейчас находятся. Если это так, они вошли в систему, если они не вошли в систему. Проблема в том, что если они войдут в другой магазин, SharedPreferences будет переопределен номером/id другой магазин. Таким образом, в основном, они могут войти только в один магазин. Как я могу сделать так, чтобы каждый магазин в SharedPreferences и как-то проверял, после чего они вошли в правильный магазин?Сохранение объекта с разными параметрами несколько раз в SharedPreferences
Вход в магазин
@Override
public void loginShop(final Shop shop, UserInfo userInfo, final Callback<Shop> callback) {
ShopLoginBody body;
body = map(shop, userInfo);
mCallLogin = App.getRestClient().getApiService().shopLogin(body);
mCallLogin.enqueue(new retrofit2.Callback<ShopLoginResult>() {
@Override
public void onResponse(Call<ShopLoginResult> call, Response<ShopLoginResult> response) {
int loginNumber;
int customerNumber;
Result<Shop> result = new Result<>();
if (response.code() != 200) {
try {
JSONObject objError = new JSONObject(response.errorBody().string());
Error error = new Error();
error.setErrorMessage(objError.getString("errorMessage"));
error.setErrorCode(objError.getInt("errorCode"));
callback.onFailure(error);
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return;
}
loginNumber = response.body().getLoginNumber();
customerNumber = response.body().getCustomerNumber();
mPreferenceAdapter.writeShopNumber(shop.getId());
mPreferenceAdapter.writeLoginNumber(loginNumber);
mPreferenceAdapter.writeClientNumber(customerNumber);
mPreferenceAdapter.writeIsLoggedIn(true);
mPreferenceAdapter.apply();
shop.setLoginId(loginNumber);
shop.setCustomerId(customerNumber);
ShopRepository shopRepository = new ShopRepository();
shopRepository.updateLoginNumber(shop);
result.setData(shop);
callback.onSuccess(result);
}
@Override
public void onFailure(Call<ShopLoginResult> call, Throwable t) {
}
});
}
Как проверить позже
isLoggedIn = mPreferenceAdapter.readIsLoggedIn();
shopNumber = mPreferenceAdapter.readShopNumber();
if (shopNumber == mShop.getId() && isLoggedIn) {
menu.findItem(R.id.action_login).setVisible(false);
menu.findItem(R.id.action_logout).setVisible(true);
} else {
menu.findItem(R.id.action_login).setVisible(true);
menu.findItem(R.id.action_logout).setVisible(false);
}
Таким образом, как я могу знать, какой из них нажал и вошел в, а также, как я могу удалить этот конкретный один, когда пользователь выходит из системы? – Esteban