GVKun编程网logo

Android-无法从SharedPreference获取整数值(无法从数据包提取部署信息)

10

如果您对Android-无法从SharedPreference获取整数值感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Android-无法从SharedPreference

如果您对Android-无法从SharedPreference获取整数值感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Android-无法从SharedPreference获取整数值的详细内容,我们还将为您解答无法从数据包提取部署信息的相关问题,并且为您提供关于10.Android-SharedPreferences使用、Android SharedPreferences、Android SharedPreferences 数据升级、android SharedPreferences 浅析的有价值信息。

本文目录一览:

Android-无法从SharedPreference获取整数值(无法从数据包提取部署信息)

Android-无法从SharedPreference获取整数值(无法从数据包提取部署信息)

我正在尝试在一个活动中将用户ID存储在SharedPreference中,并希望在任何活动中获取此整数ID.
要将此值放入“共享首选项”中,请使用以下代码.

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putInt("userId", varaible);                 
prefsEditor.commit();  

然后我试图获得此值,为此我使用以下代码

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
    int userId = myPrefs.getInt("userId", -1);  

但是它返回我-1而不是userId.如果我使用以下行获取整数值,则它将显示运行时异常.

    int userId = myPrefs.getInt("userId", Integer(null));   

我不明白我的代码有什么问题.如何在另一个活动中获取此整数userId.
请给我任何参考或提示.
提前致谢.

解决方法:

更改此:

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
int userId = myPrefs.getInt("userId", -1);  

对此

SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
int userId = myPrefs.getInt("userId", 0);  

它应该那样工作.

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 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 数据升级

在应用开发时,可能随着需求或者其他因素,原设计的 SharedPreferences 的值需要更改,这时我们该怎么做呢?

下面来看一个例子,这是我们第一版开发的,

package com.laomou.demo;

import android.content.SharedPreferences;

public class PreferencesUpgrade {
	public static final String KEY_LOCAL_VERSION = "pref_local_version_key";
	public static final int CURRENT_LOCAL_VERSION = 0;

	public static void upgradeLocalPreferences(SharedPreferences pref) {
		int version;
		try {
			version = pref.getInt(KEY_LOCAL_VERSION, 0);
		} catch (Exception ex) {
			version = 0;
		}
		if (version == CURRENT_LOCAL_VERSION)
			return;

		SharedPreferences.Editor editor = pref.edit();
		if (version == 0) {
			// TODO
			version = 1;
		}
		editor.putInt(KEY_LOCAL_VERSION, CURRENT_LOCAL_VERSION);
		editor.apply();
	}
}

随着需求或者其他因素,原设计的 SharedPreferences 的值需要更改,

比如 KEY_PICTURE_SIZE 需要更改 为 1920x1152

这是我们的第二版代码

public class PreferencesUpgrade {
	public static final String KEY_LOCAL_VERSION = "pref_local_version_key";
	public static final int CURRENT_LOCAL_VERSION = 1;

	public static void upgradeLocalPreferences(SharedPreferences pref) {
		int version;
		try {
			version = pref.getInt(KEY_LOCAL_VERSION, 0);
		} catch (Exception ex) {
			version = 0;
		}
		if (version == CURRENT_LOCAL_VERSION)
			return;

		SharedPreferences.Editor editor = pref.edit();
		if (version == 0) {
			editor.putString(KEY_PICTURE_SIZE, "1920x1152");
			editor.apply();
			version = 1;
		}
		editor.putInt(KEY_LOCAL_VERSION, CURRENT_LOCAL_VERSION);
		editor.apply();
	}
}

再来看是如何做到更改 SharedPreferences 的值

更新版本号

public static final int CURRENT_LOCAL_VERSION = 1;

如果当前版本是 0,那么则需要更新

if (version == 0) {
	editor.putString(KEY_PICTURE_SIZE, "1920x1152");
	editor.apply();
	version = 1;
}

更新当前版本号

editor.putInt(KEY_LOCAL_VERSION, CURRENT_LOCAL_VERSION);
editor.apply();


android SharedPreferences 浅析

android SharedPreferences 浅析

1. 介绍:SharedPreferences 的作用是使用键值对的方式存储数据。且支持多种不同的数据类型存储;

    Android数据持久化方法中最简单的一种,即使用Preferences的键值对存储方式。这种方式主要用来存储比较简单的一些数据, 而且是标准的Boolean、Int、Float、Long、String等类型。

 android.content.SharedPreferences是一个接口,用来获取和修改持久化存储的数据。

     有三种获取系统中保存的持久化数据的方式:

     a).this.getPreferences (int mode)

     通过Activity对象获取,获取的是本Activity私有的Preference,保存在系统中的xml形式的文件的名称为这个Activity的名字,因此一个Activity只能有一个,属于这个Activity。

     b).this.getSharedPreferences (String name, int mode)

    因为Activity继承了ContextWrapper,因此也是通过Activity对象获取,但是属于整个应用程序,可以有多个,以第一参数的name为文件名保存在系统中。

     c).PreferenceManager.getDefaultSharedPreferences(this);

    PreferenceManager的静态函数,保存PreferenceActivity中的设置,属于整个应用程序,但是只有一个,Android会根据包名和PreferenceActivity的布局文件来起一个名字保存。

    安卓中主要使用了三种方法用于得到SharePreferences对象。本结主要介绍conext类中的getSharedPreferences()方法。

2. 获取到SharedPreferences对象后,就可以向文件中写数据,或者从中读数据;主要分为三步实现:

     a) 调用SharedPreferences对象的edit()方法来获取一个SharePreferences.Editor对象。

     b) 向SharePreferences.Editor对象中添加数据,比如添加一个string类型,就使用putString()方法;

     c) 调用commit()方法将添加的数据提交,从而完成数据的存储操作。

3. 下面举例说明数据的存储于读取。

    定义了两个button, 一个用于触发存储数据, 一个用户触发读数据;

package com.exmple.xxx.sharepreferencestest;

import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private Button button;

    private Button restoreBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences.Editor editor = getSharedPreferences("testData", MODE_PRIVATE).edit();
                editor.putString("name", "leavescy");
                editor.putInt("age", 24);
                editor.putBoolean("married", false);
                editor.commit();
            }
        });

        restoreBtn = findViewById(R.id.restoreBtn);
        restoreBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SharedPreferences pref = getSharedPreferences("testData", MODE_PRIVATE);
                String name = pref.getString("name", "");
                int age = pref.getInt("age", 0);
                boolean married = pref.getBoolean("married", false);
                Log.i("MainActivity", "name is " + name);
                Log.i("MainActivity", "age is " + age);
                Log.i("MainActivity", "married is " + married);

            }
        });
    }
}

 

  在点击SAVE DATA button后, 会将数据存储到

  打开testData, 数据为:

  此时发现存储的数据确实是以键值对的方式存储了,且存储为xml格式;

 

   点击Restore Data button时, 数据被读出来,并打印出日志:

 

我们今天的关于Android-无法从SharedPreference获取整数值无法从数据包提取部署信息的分享就到这里,谢谢您的阅读,如果想了解更多关于10.Android-SharedPreferences使用、Android SharedPreferences、Android SharedPreferences 数据升级、android SharedPreferences 浅析的相关信息,可以在本站进行搜索。

本文标签: