GVKun编程网logo

android – SharedPreferences只返回默认值(android 返回按钮)

14

本篇文章给大家谈谈android–SharedPreferences只返回默认值,以及android返回按钮的知识点,同时本文还将给你拓展10.Android-SharedPreferences使用、

本篇文章给大家谈谈android – SharedPreferences只返回默认值,以及android 返回按钮的知识点,同时本文还将给你拓展10.Android-SharedPreferences使用、Android Q 中不推荐使用 PreferenceManager getDefaultSharedPreferences、Android SharedPreferences、Android SharedPreferences 一般的读写等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

android – SharedPreferences只返回默认值(android 返回按钮)

android – SharedPreferences只返回默认值(android 返回按钮)

因此,我使用SharedPreference存储数据,而不是创建数据库.

我的代码如下:

SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
        editor.putInt("favid"+id,1);
        editor.commit();
        Toast.makeText(getApplicationContext(),"Select as favorite",Toast.LENGTH_SHORT).show();

现在我想检索那些数据,所以我在其他活动中使用了以下代码:

strFav = new ArrayList<Integer>();

    if(strFav.size()>0)
        strFav.clear();
    SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
    for (int i = 1; i < 19; i++) {
        int favid = prefs.getInt("favid"+i,-1);
        if (favid != -1) 
        {
          strFav.add(i);
        }
    }

在检索数据时,我得到的所有值都是-1.

任何人都可以帮助我为什么会这样吗?我已经将许多条目作为1提交,但我仍然得到-1所有结果.

解决方法

有关getPrefernces方法,请参阅 docs:

Retrieve a SharedPreferences object for accessing preferences that are private to this activity.

因此,如果要在活动之间共享首选项,则应使用具有指定名称的getSharedPreferences.

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 Q 中不推荐使用 PreferenceManager getDefaultSharedPreferences

Android Q 中不推荐使用 PreferenceManager getDefaultSharedPreferences

PreferenceManager getDefaultSharedPreferences在Android
10中已弃用。我该如何更换它?

答案1

小编典典

可以使用PreferenceManagerieandroidx.preference.PreferenceManager
not的 Android 10 支持库版本android.preference.PreferenceManager

请记住将以下内容添加到您的 build.gradle

implementation ''androidx.preference:preference:1.1.1''

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只返回默认值android 返回按钮的分享就到这里,希望大家有所收获,若想了解更多关于10.Android-SharedPreferences使用、Android Q 中不推荐使用 PreferenceManager getDefaultSharedPreferences、Android SharedPreferences、Android SharedPreferences 一般的读写等相关知识,可以在本站进行查询。

本文标签: