我想通过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
中尚不存在的情况下添加详细信息。
答案 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密钥。