2016-11-14 5 views
0

У меня есть список магазинов, которые я получаю от 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); 
    } 

ответ

0

SharedPreferences не является лучшим для хранения вашей структуры данных, я думаю. Но, чтобы решить вашу ситуацию, вы можете, однако, сериализовать свой список зарегистрированных магазинов в строку JSON, а затем сохранить его в настройках.

Say

prefs.edit().putString("auth-shops", new Gson().toJson(shops)).apply();

+0

Таким образом, как я могу знать, какой из них нажал и вошел в, а также, как я могу удалить этот конкретный один, когда пользователь выходит из системы? – Esteban

 Смежные вопросы

  • Нет связанных вопросов^_^