sharedPreferences 是什么?
是数据持久化,就是把数据存储起来。适用于存储简单的数据
//系统会自动创建一个XML文件,名字为 preference_name Shard_Prefs
SharedPreferences mSharedPreferences = ListViewDemoActivity.this.getSharedPreferences("preference_name",Context.MODE_PRIVATE);
SharedPreferences.Editor mEditor = mSharedPreferences.edit();
mEditor.putInt("list_view_data_counts",dataCounts);
//data/data
mEditor.commit();//注意需要提交
以上就是把数据存储起来,如果需要提取存储的数据
SharedPreferences mSharedPreferences = ListViewDemoActivity.this.getSharedPreferences("preference_name",Context.MODE_PRIVATE);
mDataCounts = mSharedPreferences.getInt("list_view_data_counts);
修改就是再传进去不同的值 mEditor.putInt("list_view_data_counts",dataCounts+1);
删除就是 mEditor.remove();
PS:最好用 mEditor.apply();
提交
因为
mEditor.apply();//后台写数据,另开线程,可以让UI界面更快速的响应
//和网络相关,和IO操作相关,要用异步
getFilesDir(): 返回一个File,代表了我们app的internal目录。
getCacheDir():返回一个File,代表了我们app的internal缓存目录。
private void testFileDemo(){
//创建一个文件叫text.txt,在internal目录
File file = new File(getFilesDir(),"text.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
再在文件中写数据
try {
FileOutputStream fileOutputStream = openFileOutput("text.txt", Context.MODE_PRIVATE);
try {
fileOutputStream.write(s.getBytes());
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
void testSDcard(){
File file = new File("/sdcard/text/a.txt");
String tempFile = Environment.getExternalStorageDirectory().getAbsolutePath();
Environment.getDataDirectory();//获取android的data目录
Environment.getDownloadCacheDirectory();//获取下载的缓存目录
}
void testAssets{
//保存文件
WebView webView = new WebView(this);
webView.loadUrl("file://android_asset/test.html");
try {
//open的只能是文件不能是文件夾
getResources().getAssets().open("test.html");//讀取文件
} catch (IOException e) {
e.printStackTrace();
}
//读列表
try {
String[] fileNames = getAssets().list("images");
} catch (IOException e) {
e.printStackTrace();
}
InputStream inputStream = null;
try {
// 读图片
inputStream = getAssets().open("images/dog.jpg");
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(bitmap);
//读音频
AssetFileDescriptor assetFileDescriptor = getAssets().openFd("libai.mp3");
MediaPlayer player = new MediaPlayer();
player.reset();
player.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
}
void testResFile(){
InputStream inputStream = getResources().openRawResource(R.raw.libai);
getResources().getColor(R.color.colorAccent);
}
和res操作是一样的
PS:asset和raw异同点
assets和raw 不会编译成二进制,都打包
assets是原封不动的,raw会映射到R.java文件里面,所以可以通过id去访问