如果您对Android-无法从SharedPreference获取整数值感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Android-无法从SharedPreference
如果您对Android-无法从SharedPreference获取整数值感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于Android-无法从SharedPreference获取整数值的详细内容,我们还将为您解答无法从数据包提取部署信息的相关问题,并且为您提供关于10.Android-SharedPreferences使用、Android SharedPreferences、Android SharedPreferences 数据升级、android SharedPreferences 浅析的有价值信息。
本文目录一览:- Android-无法从SharedPreference获取整数值(无法从数据包提取部署信息)
- 10.Android-SharedPreferences使用
- Android SharedPreferences
- Android SharedPreferences 数据升级
- android SharedPreferences 浅析
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使用
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
一、文件操作模式
- 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 数据升级
在应用开发时,可能随着需求或者其他因素,原设计的 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 浅析
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 浅析的相关信息,可以在本站进行搜索。
本文标签: