如何动态创建新实例?

时间:2016-11-06 06:02:30

标签: java android sharedpreferences

我想通过sharedPreference存储一些汽车细节。并且有不止一组数据。当车号不存在时,它将创建新的sharedPreference实例。

因此,实例的名称不能与前一个名称相同。但我不知道动态创建共享偏好的新实例。

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.search_btn:
            responseText.setText("");
            mList = new ArrayList<SharedPreferences>();
            String isNum = textNum.getText().toString();
            Iterator iterator = mList.iterator();

            while (iterator.hasNext()){
                if((iterator.next().toString()).equals(isNum)){
                    Log.i("information","exist!");
                    break;

                }else {
                    SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);


                    mList.add(pref);
                    SharedPreferences.Editor editor = pref.edit();
                    editor.putString("type", textType.getText().toString());
                    editor.putString("num", textNum.getText().toString());
                    editor.putString("car", textCar.getText().toString());
                    editor.commit();
                    break;
                }
            }
            break;
     }
}   
编辑:我正试图将汽车的详细信息(车型车牌号车辆识别号)存储到{{1 }}。我想将它存储为List。我想仅在Sharedpreference中尚不存在的情况下添加详细信息。

2 个答案:

答案 0 :(得分:0)

您需要一个POJO课程来保存您的汽车的详细信息。

private class Car {
    public String num;
    public String car;

    // getters and setters
    public void setNum(String num){
        this.num = num;
    }

    public String getNum(){
        return num;
    }


    public void setCar(String car){
        this.car = car;
    }

    public String getCar(){
        return car;
    }

}

您可以使用GSON library将您的汽车列表转换为JSON并将其存储在您的SharedPreferences中。
onClick方法,

@Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.search_btn:
            responseText.setText("");
            String isNum = textNum.getText().toString();

            // create an instance of SharedPreferences
            SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);
            String value = pref.getString("cardata", "");
            Type type = new TypeToken<ArrayList<Car>>() {}.getType()
            Gson gson = new Gson();
            ArrayList<Car> cars = gson.fromJson(value, type);

            // linear search
            boolean flag = false;
            for (Car car : cars) {
                if(car.num.equals(isNum)){
                    flag = true;
                    break;
                }
            }

            // not found. add new car
            if(!flag){
                cars.add(new Car(textCar.getText().toString(), textNum.getText().toString()));
                SharedPreferences.Editor editor = pref.edit();
                editor.putString("cardata", gson.toJson(cars));
                editor.apply();
            }
     }
}

注意:对于大量汽车,您的共享偏好可能很大。如果是这种情况,请切换到数据库。

答案 1 :(得分:0)

让我说清楚这个话题。你不会使用实例。您将使用另一个密钥。就这么简单。

我不确定但是这样想;你添加设备本地汽车清单。每辆车都有一个号码。

你应该研究关键值的东西。

else块中的代码可以是这样的;

    SharedPreferences pref = getSharedPreferences("data", MODE_PRIVATE);  
    // mList.add(pref); i removed this line. sharedPreferences use Singleton.
    SharedPreferences.Editor editor = pref.edit();
    editor.putString("num-" +textNum.getText().toString(), "car-" + textCar.getText().toString());
    editor.commit();

我假设输入是数字,所以sharedPreferences数据就像;

key : num-123 value : car-123

现在,您可以检查是否存在num-123密钥。