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 中存储字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
Android File Transfer Mac: 如何在 macOS 和 Android 系统之间移动数据