2016-11-06 6 views
-3

sharedPreferenceで車の詳細を保存します。また、複数のデータグループが存在します。カー番号が存在しない場合、新しい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; 
    } 
} 

編集:私はSharedpreferenceに車(車種段数車両識別番号)の詳細を格納しようとしています。私はそれをリストとして保存したい。詳細を追加する場合は、Sharedpreferenceにまだ存在しない場合にのみ追加してください。

+1

あなたは何をしようとしているのか分かりません。 – ajb

+0

共有環境設定でデータを保存したいのですが、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; 
    } 

} 

あなたはJSONへの車のリストを変換し、あなたのSharedPreferencesに保存するGSON libraryを使用することができます。
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(); 
      } 
    } 
} 

注:車の数が多いために、あなたのsharedpreferencesは巨大なことができます。この場合、データベースに切り替えます。

+0

初めて実行すると、実際Jsonではnullです。そしてcarsはnullです---- java.lang.NullPointerException:仮想メソッド 'java.util.Iterator java.util.ArrayListを呼び出そうとしています。iterator() 'ヌルオブジェクトの参照 –

+0

ええ、ちょうどその論理。あなたの要件に合うようにするには、少し微調整する必要があります。私はあなたがそのアイデアを得ることを望みます。 –

+0

はそれを得ました。ありがとうございました!! –

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キーが存在するかどうかを確認できます。

+0

実際には、車は3つの詳細を格納する必要があります。キー値では不十分です。 –

関連する問題