【问题标题】:Save more than one data保存多个数据
【发布时间】:2021-07-05 06:09:38
【问题描述】:

我有一个疑问,我不知道如何解决它,如果我有一个只有 3 个位置且值为 [1,2,3] 的 ArrayList。我希望当用户添加例如文本 [1] 时,数据以本地模式保存在设备中。如果稍后用户想要添加另一个文本,例如 [3]。

最后,SharedPreference 将保存 [1,3]。所以如果用户退出应用重新进入,只能兑换文字[2]。因为我已经兑换了[1,3]。

我有以下,但我不知道如何正确继续。

促销代码。

private ArrayList<String> codigoInvitacionAmigos;
codigoInvitacionAmigos.add("1");
codigoInvitacionAmigos.add("2");
codigoInvitacionAmigos.add("3");

这是按钮,当用户点击兑换时

 btClaimInvite.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("TODOS: ", codigoInvitacionAmigos.toString());
            String codigo_temporal = inpt_Promo_code.getText().toString();
            if(!codigo_temporal.isEmpty()){//comprobamos que NO este el campo vacío
                for(int i=0; i < codigoInvitacionAmigos.size(); i++){
                    if(codigoInvitacionAmigos.get(i).contains(codigo_temporal)){
                        Toast.makeText(Bonus.this, "COINCIDENCIA", Toast.LENGTH_LONG).show();
                        //Guardar_CodigoReclamadoYCanjeado(0, codigo_temporal);
                        //codigoInvitacionAmigos.remove(codigo_temporal);
                    }else{
                        Toast.makeText(Bonus.this, "No coincide", Toast.LENGTH_LONG).show();
                    }
                }
            }
        }
    });

这就是我试图保存它的方法

   private void Cargar_CodigoReclamadoYCanjeado(){
    SharedPreferences load_CodigosReclamados = getSharedPreferences("CODIGO_CLAIM", MODE_PRIVATE);
    String codi = load_CodigosReclamados.getString("codes_0", "");
    if(!codi.isEmpty())codigoInvitacionAmigos.remove(codi);
    Log.d("TODOS_Cargar", codi);

    String codi_1 = load_CodigosReclamados.getString("codes_1", "");
    if(!codi_1.isEmpty())codigoInvitacionAmigos.remove(codi_1);
    Log.d("TODOS_Cargar", codi_1);

}

private void Guardar_CodigoReclamadoYCanjeado(int posicion, String codigoCanjeado){
    SharedPreferences saved_CodigosReclamados = getSharedPreferences("CODIGO_CLAIM", MODE_PRIVATE);
    SharedPreferences.Editor editor = saved_CodigosReclamados.edit();
    switch (posicion){
        case 1:
            editor.putString("codes_1", codigoCanjeado);
            break;
        default:
            editor.putString("codes_0", codigoCanjeado);
            break;
    }
    editor.apply();
    Log.d("TODOS_Saved", "Entra Saved");
}

【问题讨论】:

    标签: java android arraylist save sharedpreferences


    【解决方案1】:

    将共享首选项中使用的代码保存为逗号分隔的字符串(例如“1,3”)

    String[] codes = {"1", "2", "3"};
    
    boolean isCodeValid(String code) {
        for (String s : codes)
            if (s.equals(code)) return true;
        return false;
    }
    
    boolean isCodeUsed(String code) {
        String usedCodes = sharedPreferences.getString("used_codes", "");
        String[] usedCodesArray = usedCodes.split(",");
        for (String s : usedCodesArray)
            if (s.equals(code)) return true;
        return false;
    }
    
    void setCodeUsed(String code) {
        String usedCodes = sharedPreferences.getString("used_codes", "");
        usedCodes += code + ",";
        editor.putString("used_codes", usedCodes).apply();
    }
    

    函数的使用:

    String enteredCode = edtCode.getText().toString()
    
    if (isCodeValid(enteredCode)) {
        if (isCodeUsed(enteredCode)) System.out.println("Code already used");
        else {
            System.out.println("Code valid and not yet used");
            setCodeUsed(enteredCode);
        }
    } else System.out.println("Code not valid");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 2018-06-19
      • 2023-04-10
      • 2022-01-03
      • 1970-01-01
      相关资源
      最近更新 更多