Android:如何在 SharedPreferences for android 中存储字符串数组

Posted

技术标签:

【中文标题】Android:如何在 SharedPreferences for android 中存储字符串数组【英文标题】:Android: How to store array of strings in SharedPreferences for android 【发布时间】:2012-09-03 06:24:48 【问题描述】:

我正在构建一个使用搜索引擎搜索网络的应用。我的应用程序中有一个编辑文本,用户将从中搜索网络。我想像浏览器历史记录一样保存搜索关键字。我可以使用最后一个关键字保存并显示它,但我无法增加搜索结果的数量。我想显示最后 5 个搜索。这是我的代码:

public class MainActivity extends Activity implements OnClickListener 

Button insert;
EditText edt;
TextView txt1, txt2, txt3, txt4, txt5;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    edt = (EditText) findViewById(R.id.search_word);

    txt1 = (TextView) findViewById(R.id.txt1);
    txt1.setOnClickListener(this);

    insert = (Button) findViewById(R.id.insert);
    insert.setOnClickListener(new OnClickListener() 

        public void onClick(View v) 
            if ((edt.getText().toString().equals(""))) 
                Toast.makeText(
                        getBaseContext(),
                        "Whoa! You haven't entered anything in the search box.",
                        Toast.LENGTH_SHORT).show();

             else 
                SharedPreferences app_preferences = PreferenceManager
                        .getDefaultSharedPreferences(MainActivity.this);
                SharedPreferences.Editor editor = app_preferences.edit();
                String text = edt.getText().toString();
                editor.putString("key", text);
                editor.commit();
                Toast.makeText(getBaseContext(), text, Toast.LENGTH_LONG)
                        .show();
            

        
    );


@Override
protected void onStart() 
    // TODO Auto-generated method stub
    super.onStart();

    SharedPreferences app_preferences = PreferenceManager
            .getDefaultSharedPreferences(this);
    String text = app_preferences.getString("key", "null");
    txt1.setText(text);


public void onClick(View v) 
    String text = txt1.getText().toString();
    Toast.makeText(getBaseContext(), text, Toast.LENGTH_SHORT).show();


请帮我解决这个问题。

【问题讨论】:

查看***.com/questions/6761885/… 我见过那个东西,但这对我没有帮助,我无法从中放置字符串。 可以使用gson保存数组***.com/a/22985657/1577792 【参考方案1】:

保存数组

public boolean saveArray(String[] array, String arrayName, Context mContext)    
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i=0;i<array.length;i++)  
        editor.putString(arrayName + "_" + i, array[i]);  
    return editor.commit();  
 

加载数组

public String[] loadArray(String arrayName, Context mContext)   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    String array[] = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  

【讨论】:

谢谢。一件事,为了保存字符串数组,我必须放置 SAVE ARRAY onClick() 和 LOAD ARRAY onStart() 函数。希望你已经看到我的代码,我正在尝试做的事情。 你得到你想要的了吗?或者告诉我你到底想做什么 onClick 我想一一存储edittext中的字符串。而 onStart() 我必须显示我存储的字符串。 所以简单的在onCLick和onStart中使用这两个方法!! 你能告诉我该怎么做吗?因为我做不到。【参考方案2】:

使用 Gson 库将您的数组或对象转换为 Json,并将您的数据存储为 json 格式的字符串。

保存;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Editor editor = sharedPrefs.edit();
Gson gson = new Gson();

String json = gson.toJson(arrayList);

editor.putString(TAG, json);
editor.commit();

阅读;

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Gson gson = new Gson();
String json = sharedPrefs.getString(TAG, null);
Type type = new TypeToken<ArrayList<ArrayObject>>() .getType();
ArrayList<ArrayObject> arrayList = gson.fromJson(json, type);

原答案:Storing Array List Object in SharedPreferences

【讨论】:

以上是关于Android:如何在 SharedPreferences for android 中存储字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

SPUtils

实现用户选择主题

Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据

如何在android中创建链接按钮

Android:如何在 android studio 中配置 FFMPEG 最新版本?

如何在 Android 上将 TextView 居中?