我有一个从API获得的商店列表。每个人都有不同的ID和名称(以及其他参数)。用户可以在每个用户登录,当他们这样做时,他们需要保持登录,无论如何,直到他们最终退出。我想到的是,在SharedPreferences中保存商店的数量/ ID并将用户登录。然后,当我检查用户是否登录时,我检查在SharedPreferences中保存的商店编号是否与他们当前所在商店的数量/ ID。如果是,他们会登录,如果没有他们没有登录。问题是,如果他们登录到另一个商店,SharedPreferences将被覆盖的数字/ ID另一家商店。所以,基本上,这种方式只能在一个商店登录。如何才能让我在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);
}
答案 0 :(得分:0)
SharedPreferences
不是您数据结构的最佳存储空间。但是要解决您的情况,您可以将登录商店列表序列化为JSON字符串,然后将其存储到首选项中。
说
prefs.edit().putString("auth-shops", new Gson().toJson(shops)).apply();