在本文中,我们将详细介绍Androidsharedpreferences进入arraylist的各个方面,并为您提供关于androidarraylist用法的相关解答,同时,我们也将为您带来关于10.
在本文中,我们将详细介绍Android sharedpreferences进入arraylist的各个方面,并为您提供关于android arraylist用法的相关解答,同时,我们也将为您带来关于10.Android-SharedPreferences使用、Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged、Android SharedPreferences、Android SharedPreferences 一般的读写的有用知识。
本文目录一览:- Android sharedpreferences进入arraylist(android arraylist用法)
- 10.Android-SharedPreferences使用
- Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged
- Android SharedPreferences
- Android SharedPreferences 一般的读写
Android sharedpreferences进入arraylist(android arraylist用法)
我创建了一个简单的游戏.最后,用户的姓名和分数应该进入高分列表.为此,我想将这些数据存储在sharedpreferences中.我看到了一个帖子,并且试图将其应用到我的应用程序中,但是它强制关闭.我什至不知道这是否是我在做的正确的事情.因此,我将这些密钥对(玩家,得分)放入了一个arraylist.从那里,我可以将值输入到列表视图中.
这只是一个例子.
SharedPreferences.Editor scoreEditor = myscores.edit();
scoreEditor.putString("PLAYER", "Thomas");
scoreEditor.putString("score", "5");
scoreEditor.commit();
final ArrayList<HashMap<String,String>> LIST = new ArrayList<HashMap<String,String>>();
Map<String, ?> items = myscores.getAll();
for(String s : items.keySet()){
HashMap<String,String> hmap = new HashMap<String,String>();
hmap.put("PLAYER", s);
hmap.put("score", items.get(s).toString());
LIST.add(hmap);
}
Toast.makeText(Start.this, "LIST size: "+LIST.size(), Toast.LENGTH_LONG).show();
对我来说,如果我像这样存储这些数据也可以:
scoreEditor.putString("DATA", "Thomas" + "-" + "5");
并将其放入ArrayList< String> LIST =新的ArrayList< String>();
但我不知道该怎么做.
你们能帮我吗?
编辑:所以我可以按照Hapazar的建议走另一条路.我把这段代码放在一起,但是我不知道这是否是这样做的方法.我还没有测试过,因为sg的sharedpreferences是错误的,我仍在设法弄清楚.
SharedPreferences.Editor scoreEditor = myscores.edit();
scoreEditor.putString("DATA", "Thomas" + "-" + "5");
scoreEditor.commit();
HashSet<String> hset=new HashSet<String>();
hset.addAll((Collection<? extends String>) myscores.getAll());
ArrayList<String> LIST = new ArrayList<String>(hset);
解决方法:
SharedPreferences编辑器不接受列表,但接受Sets.您可以将列表转换为HashSet或类似的东西,然后像这样存储它.当您读回它时,将其转换为ArrayList,如果需要对其进行排序,您就可以开始了.
请注意,集合必须是一组字符串,因此您必须坚持使用“ Thomas”“-”“ 5”设置.
编辑:对于您的新更新,我在想更多类似的东西
//Retrieve the values
Set<String> set = new HashSet<String>();
set = myscores.getStringSet("key", null);
//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listofExistingscores);
scoreEditor.putStringSet("key", set);
scoreEditor.commit();
该代码未经测试,但应该可以工作
编辑:如果您的API级别低于get / setStringSet()级别,则可以尝试以下操作:
1)将高分列表变成带分隔符的字符串.这意味着,如果您有[“ Tom,1”,“ Ed,5”],则可以遍历它并将其转换为类似于“ Tom,1 | Ed,5”的字符串.您可以使用setString(..)轻松存储它.
2)当您想读回值时,执行getString(..),然后执行String.split(“ |”)以获取原始列表.好吧,它返回一个数组,但是可以很容易地将其转换为列表.
10.Android-SharedPreferences使用
1.SharedPreferences介绍
SharedPreferences,它是一个轻量级的配置文件类,用于保存软件配置参数. 采用xml文件形式存储在/data/data/包名/shared_prefs/下
优点在于:
- 轻量级,以键值对的方式进行存储,使用方便,易于理解
- 程序卸载后会也会一并被清除,不会残留信息
缺点在于:
- 不支持跨多个进程使用
- 键值数据如果过多,会导致界面卡顿
2.如何获取SharedPreferences
2.1 通过Context .getSharedPreferences()方法
public SharedPreferences getSharedPreferences(String name, int mode);
//name:指定文件名称
//mode: 可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、
//MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)
2.2 通过Activity 类中的 getPreferences()方法
public SharedPreferences getPreferences(int mode);
//mode: 可以填入MODE_PRIVATE(文件只能由调用应用程序访问)、MODE_APPEND(追加内容模式)、MODE_WORLD_READABLE(文件支持所有人可读)、MODE_WORLD_WRITEABLE(文件支持所有人可写)
//生成的配置文件名字会默认将当前活动的类名作为文件名.比如在MainActivity类下使用的,则会生成MAinActivity.xml
2.3 通过PreferenceManager中的静态public getDefaultSharedPreferences()方法
public static SharedPreferences getDefaultSharedPreferences(Context context);
//mode会自动设置为MODE_PRIVATE(文件只能由调用应用程序访问)
//生成的配置文件名字会默认将包名作为文件名.
PS:后面示例会演示。
3.如何通过SharedPreferences来读写配置参数
通过下面方法来进行读操作:
上面的第二个参数defValue:表示默认值,如果key值未找到,则将defValue默认值返回过来
通过Editor edit()成员方法来获取Editor类来实现写操作,如下所示:
Editor类下的常用方法有:
Editor putInt(String key, int value); //向key键里写入int类型的值
Editor putString(String key, String value); //向key键里写入String类型的值
Editor putStringSet(String key, Set<String> values); //向key键里写入Set类型的值
boolean commit(); //提交数据,写入io
4.使用3种方法生成SharedPreferences配置文件示例
写MainActivity.java的onCreate():
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences sp1 = MainActivity.this.getSharedPreferences("info1", MODE_PRIVATE);
//写入数据
Editor edit1 = sp1.edit();
edit1.putString("name", "test1");
edit1.commit();
//读取数据
Log.v("MainActivity","sp1: "+sp1.getString("name", ""));
SharedPreferences sp2 = MainActivity.this.getPreferences(MODE_PRIVATE);
//写入数据
Editor edit2 = sp2.edit();
edit2.putString("name", "test2");
edit2.commit();
//读取数据
Log.v("MainActivity","sp2: "+sp1.getString("name", ""));
SharedPreferences sp3 = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
//写入数据
Editor edit3 = sp3.edit();
edit3.putString("name", "test3");
edit3.commit();
//读取数据
Log.v("MainActivity","sp3: "+sp1.getString("name", ""));
}
运行后,可以看到在data/data/com.example.sdreadWrite/shared_prefs下自动生成了3个xml文件:
- info1.xml: 通过MainActivity.this.getSharedPreferences("info1", MODE_PRIVATE);实现的
- MainActivity.xml: 通过MainActivity.this.getPreferences(MODE_PRIVATE);实现的
- com.example.sdreadWrite_preferences.xml: 通过PreferenceManager.getDefaultSharedPreferences(MainActivity.this);实现的
打开info1.xml试试:
打开log打印(可以看到读出来的内容和XML配置一样):
Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged
<MultiSelectListPreference android:key="shop_list" android:entries="@array/shop_titles" android:entryValues="@array/shop_values" android:title="@string/pref_title_shops" android:dialogTitle="@string/pref_title_shops" android:defaultValue="@array/shop_values" android:summary="Choose where you hunt" />
首选项位于公共活动内部的静态PreferenceFragment内.我在PreferenceFragment的onPause和onResume上注册和取消注册SharedPreferenceChanged事件的监听器.
代码摘录:
public class AgentSettingsActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getFragmentManager().beginTransaction().replace(android.R.id.content,new SettingsFragment()).commit(); } public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferencechangelistener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Utils.Log("onCreate"); // Load the preferences from an XML resource addPreferencesFromresource(R.xml.pref_general); } @Override public void onResume() { Utils.Log("onResume"); super.onResume(); try { Utils.Log("Add pref listeners and try set summary"); getPreferenceScreen().getSharedPreferences().registerOnSharedPreferencechangelistener(this); } catch (Exception e) { Utils.Log("Pref not found"); } } @Override public void onPause() { super.onPause(); Utils.Log("onPause"); // Unregister the listener whenever a key changes getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferencechangelistener(this); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) { Utils.Log("onPreferenceChange,key : " + key); } } }
当我检查一个选项时,事件每次都会触发,直到我开始取消选中它们.然后,监听器停止被调用.我在这里缺少什么想法?这与我使用片段/活动的方式有关吗?
注意:我还应该补充说,我有一个ListPreference,即使在MultiSelectListPref正确停止响应之后仍然可以继续工作.
解决方法
从SDK 18开始,所有事情似乎都很好但在休息时,我和你一样有同样的问题.
我找到了一个似乎对我有用的解决方案:
MultiSelectListPreference multiSelectListPref = (MultiSelectListPreference) findPreference("pref_name"); if (multiSelectListPref != null) { multiSelectListPref.setonPreferencechangelistener(new Preference.OnPreferencechangelistener() { @Override public boolean onPreferenceChange(Preference preference,Object newValue) { MultiSelectListPreference mpreference = (MultiSelectListPreference) preference; mpreference.setSummary(newValue.toString()); mpreference.setValues((Set<String>) newValue); return true; } }); }
也许它对你的情况也很有用
Android SharedPreferences
一、文件操作模式
- Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容。
- Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件。
- Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
- MODE_WORLD_READABLE:表示当前文件可以被其他应用读取;
- MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
二、写入文件
SharedPreferences sharedPreferences= getSharedPreferences("data",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name", “Tom”);
editor.putInt("age", 28);
editor.putBoolean("marrid",false);
editor.commit();
三、读取数据
SharedPreferences sharedPreferences= getSharedPreferences("data", Context .MODE_PRIVATE); String userId=sharedPreferences.getString("name","数据不存在,时候的代替值");
四、删除指定数据
editor.remove("name");
editor.commit();
五、清空数据
editor.clear();
editor.commit();
Android SharedPreferences 一般的读写
package com.example.sharedpreferences;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private final String SharedPreferences_Name = "SharedPreferences_name";
private final String USER_NAME = "user_name";
private final String USER_PASSWORD = "user_password";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
wrtieSharedPreferences();
readSharedPreferences();
}
// 读出记录
private void readSharedPreferences() {
SharedPreferences sp = this.getSharedPreferences(
SharedPreferences_Name, Context.MODE_PRIVATE);
String username = sp.getString(USER_NAME, "无值");
Log.d("存储到本地的用户名", username);
}
// 写入记录到本地
private void wrtieSharedPreferences() {
SharedPreferences shared = this.getSharedPreferences(
SharedPreferences_Name, Context.MODE_PRIVATE);
Editor edit = shared.edit();
edit.putString(USER_NAME, "zhangphil");
edit.putString(USER_PASSWORD, "12345678");
// 提交
edit.commit();
}
}
关于Android sharedpreferences进入arraylist和android arraylist用法的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于10.Android-SharedPreferences使用、Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged、Android SharedPreferences、Android SharedPreferences 一般的读写等相关内容,可以在本站寻找。
本文标签: