2017-02-14 12 views
0

Мне удалось сохранить одну запись в общих настройках и отобразить ее в виде списка на другом представлении, но я хочу добавить несколько записей и их отобразить в списке тоже , Я думал, что у меня есть правильный код, но он не видит, что что-то изменило. Мое намерение - список избранных, я беру данные ввода из одного представления и отображаю его в другом представлении.Как сохранить набор строк в общих предпочтениях

SingleView активность:

SharedPreferences.Editor fd; 
SharedPreferences FeedPref; 

private ArrayList<String> addArray = new ArrayList<>(); 

    txt = (TextView) findViewById(R.id.name); 

    add = (Button) findViewById(R.id.btnAdd); 
    FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
    fd = FeedPref.edit(); 


    add.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      String message = txt.getText().toString(); 

      if (addArray.contains(message)) { 
       Toast.makeText((getBaseContext()), "Plant Already Added", Toast.LENGTH_LONG).show(); 
      } else { 
       addArray.add(message); 

       FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
       fd = FeedPref.edit(); 
       fd.putInt("array_size", addArray.size()); 

       for (int i = 0; i < addArray.size(); i++) { 
        fd.putString("Status_" + i, addArray.get(i)); 
       } 
        fd.commit(); 
        Toast.makeText((getBaseContext()), "Plant Added", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 

mygarden активность:

public class mygardenMain extends Activity { 
//String[] presidents; 
ListView listView; 
//ArrayAdapter<String> adapter; 
SharedPreferences FeedPref; 
SharedPreferences.Editor fd; 
//private ArrayList<String> addArray; 
//public static final String PREFS = "examplePrefs"; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mygarden_list); 
    listView = (ListView) findViewById(R.id.mygardenlist); 
    //addArray = new ArrayList<>(); 

    FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    int size = FeedPref.getInt("array_size", 0); 

    for (int i = 0; i < size; i++) { 
     String mess = FeedPref.getString("Status_" + i, null); 
     String[] values = new String[]{mess}; 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values); 
     listView.setAdapter(adapter); 

    } 
} 
+0

fd.commit(); должен был быть вызван, как только вы положили строку. И это не идеальный способ сделать это. –

+0

Почему бы не сохранить набор вместо этого, я думаю, что он будет более ясным, посмотрите в этом сообщении: http://stackoverflow.com/questions/7057845/save-arraylist-to-sharedpreferences, чем на событии onclick, вы должны получить набор из общего предпочтения, добавьте новый элемент и сохраните его. – fdam

+0

То, что я использовал для кодирования, откуда я добрался до сегодняшнего дня. – user4682589

ответ

0

SingleView активность:

SharedPreferences.Editor fd; 
    SharedPreferences FeedPref; 

    private ArrayList<String> addArray = new ArrayList<>(); 

     txt = (TextView) findViewById(R.id.name); 

     add = (Button) findViewById(R.id.btnAdd); 
     FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     fd = FeedPref.edit(); 


     add.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       String message = txt.getText().toString(); 

       if (addArray.contains(message)) { 
        Toast.makeText((getBaseContext()), "Plant Already Added", Toast.LENGTH_LONG).show(); 
       } else { 

        FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
        fd = FeedPref.edit(); 

        Gson gson = new Gson(); 
        String jsonText = Prefs.getString("key", ""); 
        if(!jsonText.equals("")) 
        { 
         String[] text = gson.fromJson(jsonText, String[].class); //EDIT: gso to gson 
         if(text.length>0) 
         { 
          //addArray = Arrays.asList(text); 
          //addArray = new ArrayList(addArray); 
          List<String> addArrayNew = Arrays.asList(text); 
          addArray = new ArrayList(addArrayNew); 

         } 
        } 
        addArray.add(message); 

        gson = new Gson(); 
        jsonText = gson.toJson(addArray); 
        prefsEditor.putString("key", jsonText); 
        prefsEditor.commit(); 
       } 
      }); 
     } 

mygarden активность:

public class mygardenMain extends Activity { 
    //String[] presidents; 
    ListView listView; 
    //ArrayAdapter<String> adapter; 
    SharedPreferences FeedPref; 
    SharedPreferences.Editor fd; 
    //private ArrayList<String> addArray; 
    //public static final String PREFS = "examplePrefs"; 
    String jsonText; 

    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.mygarden_list); 
     listView = (ListView) findViewById(R.id.mygardenlist); 
     //addArray = new ArrayList<>(); 

     FeedPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     int size = FeedPref.getInt("array_size", 0); 

     Gson gson = new Gson(); 
     jsonText = FeedPref.getString("key", ""); 
     if(!jsonText.equals("")) 
     { 
      String[] values= gson.fromJson(jsonText, String[].class); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, values); 
      listView.setAdapter(adapter); 
     } 

    } 
+0

Im получает ошибку с .addAll (данные); Как он знает, какую строку ввести? его отображение данных красным цветом. – user4682589

+0

также получает обязательную декларацию окончательной ошибки в частях jsonText – user4682589

+0

У вас уже есть данные в addArray, поэтому удалите строку addArray .addAll (data); И объявить String jsonText выше для создания, а затем использовать в onclick – user2025187

0

Set abc = new HashSet <>();

abc.add ("john");

abc.add ("test");

abc.add ("again");

SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 

    editor.putStringSet("key",abc); 

    editor.commit();