博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android网络与数据存储_学习笔记_第五周
阅读量:4083 次
发布时间:2019-05-25

本文共 7326 字,大约阅读时间需要 24 分钟。

1、SharedPreferences是什么?

数据持久化
2、SharedPreferences适用于哪些地方?
保存比较简单的数据

代码里的全局变量、局部变量是放在内存里的,当页面被关闭后,内存就被释放了,全局变量、局部变量值被销毁了;所以有时我们需要保存一些数据,下次再读取ta,比如登录信息。

快捷键:提取为方法 command+option+m;

保存数据:

/*    * 保存数据    * */    private void saveData2Preferences() {        //系统会自动创建xml文件,文件名preference_name;        //1、打开Preferences,名称为preference_name,如果存在则打开它,否则创建新的Preferences        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);        //2、让preference_name处于编辑状态        SharedPreferences.Editor editor = sharedPreferences.edit();        //3、存放数据        editor.putString(TEXT_VIEW_DATA,mDataString);        //4、完成提交        editor.apply();    }

以上,可以将数据保存到文件名为preference_name里,文件在data/data/包名/,目录下;终端命令查看文件:

adb shell

cd data/data/
cd com.example.chenjinhua.sharedpreferences
vi 文件名
退出vi命令:按Esc,然后 :q! 读取数据

/*    * 读取数据    * */    private void setData() {        //1、获取Preferences        SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE);        //2、取出数据        mDataString = sharedPreferences.getString(TEXT_VIEW_DATA,"10");        mEditText_data.setText(mDataString);        mTextView_second.setText(mDataString);    }

完整的代码为:

package com.example.chenjinhua.sharepreferences;import android.content.SharedPreferences;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;/** * Created by chenjinhua on 16/3/30. */public class SecondActivity extends AppCompatActivity implements View.OnClickListener {
public static final String TEXT_VIEW_DATA = "textView_data"; private EditText mEditText_data; private TextView mTextView_second; private Button mButton_confirm; private String mDataString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_shareprefs_textview); Log.i("MainActivity", "SecondActivity"); findViews(); mButton_confirm.setOnClickListener(this); setData(); } /* * 读取数据 * */ private void setData() { SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE); mDataString = sharedPreferences.getString(TEXT_VIEW_DATA,"10"); mEditText_data.setText(mDataString); mTextView_second.setText(mDataString); } private void findViews() { mEditText_data = (EditText) findViewById(R.id.editText_data); mButton_confirm = (Button) findViewById(R.id.button_confirm); mTextView_second = (TextView) findViewById(R.id.textView_second); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.button_confirm: mDataString = mEditText_data.getText().toString(); mTextView_second.setText(mDataString); saveData2Preferences(); break; } } /* * 保存数据 * */ private void saveData2Preferences() { //系统会自动创建xml文件,文件名preference_name, SharedPreferences sharedPreferences = getSharedPreferences("preference_name",MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(TEXT_VIEW_DATA,mDataString); editor.apply(); }}

如何创建?

如何保存?
如何修改?

修改就是再put一次,给同样的key不同的value,如下

editor.putString(TEXT_VIEW_DATA,value1);
editor.putString(TEXT_VIEW_DATA,value2);

如何删除?

editor.remove(xxx); //删除key为xxx对应的值

注意:

editor.commit(); //同步写数据editor.apply();//1、另开一个线程,异步写数据,不会占用UI线程;2、和网络相关、IO操作相关,都要用异步。

原理

在data/data/文件夹里写了一个文件。

如何封装成一个能用的类?

如何清除缓存?

adb clear

练习:

做一个小应用,启动时有2张引导界面,只有第一次启动时显示,下一次启动不会显示。


一、存储的分类:内置存储和外置存储

Internal storage:在data/data/包名里
External storage:用getExternalStorageDirectory()方法获取目录

获取External存储的权限

android:permission.WRITE_EXTERNAL_STORAGE

Internal storage

getFileDir():返回一个File,代表了app的internal目录;
getCacheDir():返回一个File,代表了app的internal缓存目录。

在内部存储创建文件,并把内容保存在文件里即存储数据:

private void testFileDemo() {        File file = new File(getFilesDir(),"test.txt");        Log.i("MainActivity","getFileDir"+ getFilesDir().getAbsolutePath());        Log.i("MainActivity","file path"+ file.getAbsolutePath());        try {           boolean isSuccess = file.createNewFile();        } catch (IOException e) {            e.printStackTrace();        }    }

与sharedPreferences的区别:

1、sharedPreferences由系统封装,但是它不够灵活,只能存String、boolean、int型数据;
2、自己创建很灵活,可以存很多数据、大批量的数据。

新建文件,并且写入数据:

String string = "I'm tall";        try {            FileOutputStream fileOutputStream = openFileOutput("test2.txt", Context.MODE_PRIVATE);            try {                fileOutputStream.write(string.getBytes());                fileOutputStream.close();            } catch (IOException e) {                e.printStackTrace();            }        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }
//check external storage state        String state = Environment.getExternalStorageState();        if(TextUtils.equals(state,Environment.MEDIA_MOUNTED)){}

持久化数据有几种?

1、存到sharedPreferences,
2、存到文件里
3、数据库
4、网络存储

基本操作:

1、如何读取应用本身目录?
2、怎样读取文件?
3、如何写入文件?
4、如何删除文件?

如何操作文件(增删改查)


读取各目录下的文件

1、操作外置存储文件

public void testSDCard(){        String filePath = Environment.getExternalStorageDirectory().getAbsolutePath();        File file = new File("filePath");    }

2、操作assets目录下的文件

android studio添加assets文件夹:

1、结构管理区域选择“Project”;
2、新建”assets”文件夹:app->src->main,new Directory,”assets”
3、配置:项目文件夹根目录下,xxx.iml文件里(xxx为项目名)添加如下代码:

private void testAsserts() throws IOException {        /*第一种方法:直接读路径        * */        //webView加载asset中的文件内容        WebView webView = new WebView(this);        //把本地的网页缓存在这        webView.loadUrl("file:///android_asset/test.html");        /*第二种方法:读流        */        try {            //open只能是文件不能是文件夹            InputStream inputStream = getResources().getAssets().open("test.html");            inputStream        } catch (IOException e) {            e.printStackTrace();            Toast.makeText(MainActivity.this,"文件读取异常",Toast.LENGTH_SHORT).show();        }        //读列表        String[] fileNames = getAssets().list("images/");        //读图片        InputStream inputStream = getResources().getAssets().open("images/me_one");        //将输入流变成bitmap(图片的位图)        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);        ImageView imageView = new ImageView(this);        imageView.setImageBitmap(bitmap);        //读音频        AssetFileDescriptor assetFileDescriptor = getAssets().openFd("yesterday_once_more.pm3");        MediaPlayer mediaPlayer = new MediaPlayer();        mediaPlayer.reset();        mediaPlayer.setDataSource(                assetFileDescriptor.getFileDescriptor(),                assetFileDescriptor.getStartOffset(),                assetFileDescriptor.getLength());        mediaPlayer.prepare();        mediaPlayer.start();    }

3、操作raw目录下的文件、操作res目录下的文件

public void testResFile(){        InputStream inputStream = getResources().openRawResource(R.raw.yesterday_once_more);      getResources().getColor(R.color.abc_background_cache_hint_selector_material_dark);        getResources().getString(R.string.abc_action_bar_home_description);    }

assets和raw里的音频文件:

相同点:都是将音频文件打在包里,不会有变动
不同点:assets里是原封不动的,res原封不动时系统会放入资源id里,可通过id访问。

转载地址:http://yeani.baihongyu.com/

你可能感兴趣的文章
db sql montior
查看>>
read humor_campus
查看>>
IBM WebSphere Commerce Analyzer
查看>>
Unix + OS IBM Aix FTP / wu-ftp / proftp
查看>>
my read work
查看>>
db db2 base / instance database tablespace container
查看>>
hd disk / disk raid / disk io / iops / iostat / iowait / iotop / iometer
查看>>
project ASP.NET
查看>>
db db2_monitorTool IBM Rational Performace Tester
查看>>
OS + Unix Aix telnet
查看>>
IBM Lotus
查看>>
Linux +Win LAMPP Tools XAMPP 1.7.3 / 5.6.3
查看>>
my read_university
查看>>
network manager
查看>>
OS + Linux Disk disk lvm / disk partition / disk mount / disk io
查看>>
RedHat + OS CPU、MEM、DISK
查看>>
net TCP/IP / TIME_WAIT / tcpip / iperf / cain
查看>>
webServer kzserver/1.0.0
查看>>
OS + Unix IBM Aix basic / topas / nmon / filemon / vmstat / iostat / sysstat/sar
查看>>
my ReadMap subway / metro / map / ditie / gaotie / traffic / jiaotong
查看>>