android存储数据shared,Android中存储数据(文件和SharedPreferences,SD)

轻量级存储

ab3d8dc2e5f2

image.png

使用Activity类的getSharedPreferences方法获得SharedPreferences对象,其中存储key-value的文件的名称由getSharedPreferences方法的第一个参数指定。

获取SharedPreferences对象

SharedPreferences settings = getSharedPreferences(fileName, mode);

获得Editor对象

SharedPreferences.Editor ed = settings.edit();

可以用下面两种

getCacheDir()方法用于获取/data/data//cache目录

getFilesDir()方法用于获取/data/data//files目录

文件

package com.example.fragment_text2;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import android.app.Activity;

import android.app.FragmentManager;

import android.content.Context;

import android.content.SharedPreferences;

import android.content.SharedPreferences.Editor;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Toast;

public class MainActivity extends Activity {

Fragment_text fragment_text;

Fragment_text fragment_text2;

private FragmentManager manager;

private SharedPreferences preferences;

Context ss = MainActivity.this;// 给上下文赋值;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

manager = getFragmentManager();// 获取碎片管理者

// 通过碎片管理者通过id来指定fragment控件.然后赋值给了Fragment_text碎片类,

// 然后就可以调用碎片类的方法了

fragment_text = (Fragment_text) manager.findFragmentById(R.id.fragment);

// 通过tag指定

fragment_text2 = (Fragment_text) manager

.findFragmentByTag("tastfragment");

// 建一个text.xml文件,里面都是键值对,参数1是文件名,参数2是创建的方式

preferences = getSharedPreferences("text", Context.MODE_PRIVATE);

}

// public void dian(View v){

// 不能new,因为不会走生命周期方法,会报空指针错误

// 静态添加的碎片生命周期在创建布局时已经走了一遍

// Fragment_text text = new Fragment_text();

// text.settext("我去找你");

// }

// 不能new没有(布局里没有) 那只能用=已有(布局里有)

public void dian(View v) {

fragment_text.settext("我去找你");

fragment_text2.settext("来呗");

}

// 存储

public void ok(View v) {

// -----------------方法1preferences----------------------

Editor edit = preferences.edit();// 开启一个Editor的事件

edit.putString("test", fragment_text.gettext());// 传值

edit.commit();// 提交事务

// ----------------方法2ss--------------------

try {

//通过上下文调openFileOutput方法

// 建一个tess文件,参数1是文件名,参数2是创建的方式

FileOutputStream data = ss.openFileOutput("tess",

Context.MODE_PRIVATE);//返回一个FileOutputStream字节输出流

data.write("你好".getBytes());// 写一个字符然后转换byte子节

data.close();// 关闭资源

} catch (Exception e) {

e.printStackTrace();

}

}

// 读取

public void ll(View v) {

// -----------------方法1----------------------

// getString获取指定参数1的数值

String string = preferences.getString("test", "");

fragment_text.settext(string);

// -----------------方法2---------------------------

try {

//openFileInput参数是指定文件

//返回一个FileInputStream字节输入流

FileInputStream input = ss.openFileInput("tess");

byte[] b = new byte[1024];//接受数据的

int i = input.read(b);// read方法把input值存储到b数组中

String string2 = new String(b, 0, i);// 截取String,b组从0下表开始,到i结束;

fragment_text2.settext(string2);

input.close();// 释放资源

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

文件区别

这两种的区别一个是xml文件一个是文件,

存储类型区别

第一种只能存储八大基本类型用map集合

第二种存储的是字节

调用方法区别

第1种通过获得getSharedPreferences("text", Context.MODE_PRIVATE);来新建

第二种通过上下文.openFileOutput("tess",Context.MODE_PRIVATE);来新建

储存位置区别

第一种目录是data/data/项目包名.../shared_prefs

第二种目录是data/data/项目包名.../files

SD卡进行操作时要获得权限

代码SD写

// 使用SD卡存储要判断SD是否安装上挂载上 注要获得对SD卡的操作权限

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

// 获取SDCard目录

File sdCardDir = Environment.getExternalStorageDirectory();

File saveFile = new File(sdCardDir, "test.txt");

try {

FileOutputStream outStream = new FileOutputStream(saveFile);

outStream.write("Hello World!".getBytes());

outStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

SD读

if (Environment.getExternalStorageState().equals(

Environment.MEDIA_MOUNTED)) {

File sdCardDir = Environment.getExternalStorageDirectory();

File saveFile = new File(sdCardDir, "test.txt");

try {

FileInputStream outStream = new FileInputStream(saveFile);

byte b[]=new byte[1024];

int i = outStream.read(b);

String string = new String(b,0,i);

fragment_text.settext(string);

outStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

内部文件、外部文件的读写

SharedPreferences的读写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SharedPreferences提供了一种轻量级的数据存储方式,可以用来存储简单的键值对数据SharedPreferences存储数据是以XML文件的形式保存在设备的本地文件系统的。 具体的步骤如下: 1. 获取SharedPreferences对象。可以通过Context的getSharedPreferences()方法或Activity的getPreferences()方法获取SharedPreferences对象。 ``` // 通过Context获取SharedPreferences对象 SharedPreferences preferences = getSharedPreferences("my_preferences", Context.MODE_PRIVATE); // 通过Activity获取SharedPreferences对象 SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE); ``` 2. 使用SharedPreferences.Editor对象保存数据。可以通过SharedPreferences的edit()方法获取SharedPreferences.Editor对象,然后使用putXxx()方法存储数据。其Xxx可以是int、float、boolean、long、String等数据类型。 ``` // 获取SharedPreferences.Editor对象 SharedPreferences.Editor editor = preferences.edit(); // 存储数据 editor.putString("username", "Tom"); editor.putInt("age", 20); editor.putBoolean("isMale", true); // 提交数据 editor.apply(); ``` 3. 使用SharedPreferences对象获取数据。可以使用SharedPreferences的getXxx()方法获取数据。其Xxx可以是int、float、boolean、long、String等数据类型。 ``` // 获取数据 String username = preferences.getString("username", ""); int age = preferences.getInt("age", 0); boolean isMale = preferences.getBoolean("isMale", false); ``` 在这个示例,我们通过SharedPreferences存储了用户名、年龄和性别的数据,并通过SharedPreferences获取了这些数据。 需要注意的是,SharedPreferences存储数据是以键值对的形式保存的,其键是一个字符串,值可以是任意基本类型数据。在存储和获取数据时,需要使用相应的putXxx()和getXxx()方法,并指定键的名称和默认值(可选)。另外,为了保护用户的隐私,建议不要将敏感信息存储SharedPreferences

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值