2017-02-14 65 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

我得到一个与.addAll(数据)错误;它如何知道要输入的字符串?其显示数据为红色。 – user4682589

+0

也得到一个需要在jsonText部分声明最终错误 – user4682589

+0

你已经在addArray中有数据,所以删除行addArray .addAll(data); 并声明字符串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();