Android—数据存储方式(一)

来源:互联网 发布:织梦cms和wordpress 编辑:程序博客网 时间:2024/06/05 04:15

Android中的数据存储方式

1、文件存储

 思维导图:


         文件存储是 Android 中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动的保存到文件当中的。它比较适合用于存储一些简单的文本数据或二进制数据。如果你想使用文件存储方式来保存一些较为复杂的文本数据,就需要定义一套自己的格式规范,方便于之后将文件重新解析出来。

注意:在进行手机读写的时候需要注意一下几点

①、判读手机内存卡是否可用

    //获取手机内存卡路径        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){            sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();        }

②、在AndroidManifest.xml  取得权限

  <!-- 内存卡的读写权限 -->    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


    ①可以使用Android  Content类中自带的openFileOutput()方法写入数据, openFileInput()方法读取数据

  openFileOutput这个方法自带两个参数:

           第一个参数是文件创建时使用的名称,名称只是名字不能带有路径,因为所有文件都是默      认存储到/data/data/<包名>/files/ 目录下的。

           第二个参数是文件的操作模式,主要有两种模式可以选择, MODE_PRIVATE(覆盖原文) 和 MODE_APPEND(追加内容)

          openFileOutput() 方法返回的是一个 FileOutputStream 对象,得到这个对象之后就可以使用 Java 流的方式将数据写入到文件中了。

openFileInput()方法只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data/<包名>/files/ 目录下去加载这个文件,并返回一个 FileInputStream 对象


代码:

 写 

   public void write(View view){        String first=write_baozi.getText().toString();  //写的内容        String fileName=write_name.getText().toString();  //文件的名字        try { //设置文件名字,已经存储方式            FileOutputStream fos= openFileOutput(fileName, Context.MODE_PRIVATE);            //向文件中写入数据            fos.write(first.getBytes());            fos.close();//关闭流            Toast.makeText(this, "保存成绩!", Toast.LENGTH_SHORT).show();//提示        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }


 读

 public void read(View view){        String fileName=write_name.getText().toString();        try { //设置要打开的存储文件的名字            FileInputStream fis=openFileInput(fileName);            byte bt[]=new byte[1024];            int len=0;            StringBuffer sb=new StringBuffer();            while((len=fis.read(bt))!=-1){                sb.append(new String(bt,0,len));            }            read_baozi.setText(sb);          fis.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }


    ②可以使用和Java一样读写文件

    Java的写

public void write(View view){        String first=write_baozi.getText().toString();  //写的内容        String fileName=write_name.getText().toString();  //文件的名字        try {              //sdCard手机内存卡路径            FileOutputStream fos=new FileOutputStream(sdCard+"/"+fileName);            fos.write(first.getBytes());            fos.close();            Toast.makeText(this, "保存成绩!", Toast.LENGTH_SHORT).show();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }


    Java的读

   

 public void read(View view){        String fileName=write_name.getText().toString();        try {               //sdCard 内存卡路径            FileInputStream fis=new FileInputStream(sdCard+"/"+fileName);            byte bt[]=new byte[1024];            int len=0;            StringBuffer sb=new StringBuffer();            while((len=fis.read(bt))!=-1){                sb.append(new String(bt,0,len));            }            read_baozi.setText(sb);          fis.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }

2、sharedPreference存储数据(可实现记住密码、自动登录)

  思维导图:

代码:

package com.example.myapplication;import android.content.Context;import android.content.SharedPreferences;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.Toast;public class LoginActivity extends AppCompatActivity {    private EditText euname;    private EditText eupass;    private SharedPreferences sp;    private SharedPreferences.Editor editor;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_login);        euname = (EditText) findViewById(R.id.uname);        eupass = (EditText) findViewById(R.id.upass);        sp = getSharedPreferences("loginInfo", Context.MODE_PRIVATE);        editor = sp.edit();        String uname=sp.getString("uname","");        String upass=sp.getString("upass","");        euname.setText(uname);        eupass.setText(upass);    }    public void login(View view){        String uname=euname.getText().toString();        String upass=eupass.getText().toString();        Toast.makeText(this, "跳转页面", Toast.LENGTH_SHORT).show();        editor.putString("uname",uname);        editor.putString("upass",upass);        //细节:        editor.commit();    }}

效果:

     第一次     第二次



原创粉丝点击