GVKun编程网logo

Android sharedpreferences进入arraylist(android arraylist用法)

9

在本文中,我们将详细介绍Androidsharedpreferences进入arraylist的各个方面,并为您提供关于androidarraylist用法的相关解答,同时,我们也将为您带来关于10.

在本文中,我们将详细介绍Android sharedpreferences进入arraylist的各个方面,并为您提供关于android arraylist用法的相关解答,同时,我们也将为您带来关于10.Android-SharedPreferences使用、Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged、Android SharedPreferences、Android SharedPreferences 一般的读写的有用知识。

本文目录一览:

Android sharedpreferences进入arraylist(android arraylist用法)

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使用

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

Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged

我正在使用具有以下属性的 MultiSelectListPreference ..

<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

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 一般的读写

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进入arraylistandroid arraylist用法的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于10.Android-SharedPreferences使用、Android MultiSelectListPreference取消选中不会触发SharedPreferenceChanged、Android SharedPreferences、Android SharedPreferences 一般的读写等相关内容,可以在本站寻找。

本文标签: