2016-11-14 52 views
0

我有一个从API获取的商店列表。每个人都有不同的ID和姓名(以及其他参数)。用户可以在他们每个人中登录,并且在他们这样做时,他们需要保持登录状态,无论如何,直到他们最终退出。我想到的是,在SharedPreferences中保存商店的号码/ ID并登录用户。然后,当我检查用户是否登录时,我检查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字符串,然后将其存储到首选项中。

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

+0

这样,我怎么能知道被点击其中一个,并登录到,而且,当用户登出我怎么能删除特定的一个? – Esteban

相关问题