Android 数据存储方式一,简单登录演示

 保存轻量型数据

/**
 * 存储数据
 *  1、SharedPreference 轻量型数据
 *         本质:Map,键值对,支持数据类型更单一
 *         打开模式:MODE_PRIVATE 只有自己的应用可以使用
 *                 MODE_APPEND  追加
 *          保存的位置:data/data/包名/shared_prefs/xxx.xml
 */

存储数据

private void save(){//存储数据
        //创建SharedPreferences对象 getSharedPreferences(filename,)
        SharedPreferences sp= getSharedPreferences("test.text", Context.MODE_PRIVATE);
        //借助Editor来存储数据 sp.edit()
        SharedPreferences.Editor editor= sp.edit();
        //存储editor.putXXX(String,value)
        editor.putString("name","张三");
        editor.putInt("age",18);
        editor.putBoolean("isStu",false);
        //提交
        editor.apply();//比较推荐,没有返回值
//        editor.commit();//有返回值
    }

得到数据

private void get(){//获取数据
        //创建SharedPreferences对象 getSharedPreferences(filename,)
        SharedPreferences sp= getSharedPreferences("test.text", Context.MODE_PRIVATE);
        //从sp中获取数据
        sp.getString("name","");
        sp.getInt("age",0);


    }

例子:简单的登录界面展示

public class LoginActivity extends AppCompatActivity {

    private EditText nameED,pawED;
    private CheckBox remember;
    private Button Login;
    private SharedPreferences sp;
    private static final String SP_LOGIN="login";
    private static final String SP_KEY_NAME="name";
    private static final String SP_KEY_PWD="pwd";
    private static final String SP_KEY_ISREMRMBER="isRemember";
    private String yonghu,mima;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        nameED=findViewById(R.id.yonghu);
        pawED=findViewById(R.id.mimma);
        remember=findViewById(R.id.CB);
        Login=findViewById(R.id.BT);
        sp=getSharedPreferences(SP_LOGIN,MODE_PRIVATE);


        Login.setOnClickListener(new View.OnClickListener() {//点击登录
            @Override
            public void onClick(View view) {
                //登录

                yonghu=nameED.getText().toString();
                mima =pawED.getText().toString();

                if(TextUtils.isEmpty(yonghu)||TextUtils.isEmpty(mima)){//判断用户名和密码是否为空
                    //不能为空
                }else {
                    saveData(yonghu,mima);
                    Intent intent=new Intent(LoginActivity.this,HomedActivity.class);
                    startActivity(intent);
                    finish();
                }
            }
        });
        //回显数据
        bindData();


    }

    private void bindData() {//自动填充数据
        boolean isRemember=sp.getBoolean(SP_KEY_ISREMRMBER,false);
        remember.setChecked(isRemember);
        if (isRemember){
            String name=sp.getString(SP_KEY_NAME,"");
            String pwd=sp.getString(SP_KEY_PWD,"");
            nameED.setText(name);
            pawED.setText(pwd);

            if(!(TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd))){//判断用户名和密码是否不为空
                //不为空直接进
                Intent intent=new Intent(LoginActivity.this,HomedActivity.class);
                startActivity(intent);
                finish();
            }
        }

    }

    private void saveData(String name,String pwe) {
        if (remember.isChecked()){//是否选中
            //保存数据,记住密码的状态
            sp.edit().putString(SP_KEY_NAME,name)
                    .putString(SP_KEY_PWD,pwe)
                    .putBoolean(SP_KEY_ISREMRMBER,true)//设置密码状态为true记住
                    .apply();

        }else {
            //将账号密码置空
            sp.edit().putString(SP_KEY_NAME,"")
                    .putString(SP_KEY_PWD,"")
                    .putBoolean(SP_KEY_ISREMRMBER,false)//设置密码状态为false没记住
                    .apply();
        }
    }

}

文件数据存储

**
 * 普通文件的存储
 *      内部路径:data/data/<packagename>/files/目录下
 *      外部路径:公开路径:storage/emulated/0/...关闭
 *              私自路径:storage/emulaed/0/Adndroid/data/包名/...
 *                      getExternalFilesDir(String)
 *                      getExternalCacheDir()
 *              
 *      文件路径:filePath
 *
 *      raw 原生,与drawable的区别,不会压缩
 *              图片,普通文件
 *              放在res,生成R文件,R.raw.xxx
 *              只能读,不能写
 *       assets 不会压缩
 *              与res同级,不能生成到R文件中,只能流来读取
 *              与res资源不同的是,可支持子目录
 *              只能读,不能写
 *              html,css,js等
 *      流:InputStream,OutputStream
 *           Reader,Writer
 */
public class FileActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView TV;
    private ImageView IV;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_file);

        TV=findViewById(R.id.TV);
        IV=findViewById(R.id.IV);

        Button button=findViewById(R.id.But1);
        Button button1=findViewById(R.id.But2);
        button.setOnClickListener(this);
        button1.setOnClickListener(this);
        
        Button button3=findViewById(R.id.But3);
        Button button4=findViewById(R.id.But4);
        button3.setOnClickListener(this);
        button4.setOnClickListener(this);

        Button button5=findViewById(R.id.But5);
        button5.setOnClickListener(this);

        Button button6=findViewById(R.id.But6);
        button6.setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.But1:
                //存储数据
                writeToFileBtn();
                break;
            case R.id.But2:
                //获取数据
                readFromFile();
                break;
            case R.id.But3:
                //外部数据存储
                writerToExternal();
                break;
            case R.id.But4:
                //外部文件数据获取
                readFromExternal();
                break;
            case R.id.But5:
                //从raw中读取图片
                readFromRaw();
                break;
            case R.id.But6:
                readFromAssets();
                break;
        }
    }

    private void readFromAssets() {
        AssetManager manager=getAssets();
        BufferedReader reader=null;
        try {
            InputStream open = manager.open("aba");
            reader=new BufferedReader(new InputStreamReader(open));
            String line;
            StringBuilder sb=new StringBuilder();
            while ((line=reader.readLine())!=null){
                sb.append(line);
            }
            TV.setText(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (reader!=null){
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    @SuppressLint("ResourceType")
    private void readFromRaw() {
//        IV.setImageResource(R.raw.dome6);//原始的图片设置

        InputStream is = getResources().openRawResource(R.raw.dome6);//
        Bitmap bitmap = BitmapFactory.decodeStream(is);//从流里面解析图片
        IV.setImageBitmap(bitmap);
    }

    private void readFromExternal() {
        File externalCacheDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);//获取路径

        ObjectInputStream ois=null;

        try {
            ois=new ObjectInputStream(new FileInputStream(new File(externalCacheDir,"stu.dat")));//通过文件路径和名字

            Student stu=(Student) ois.readObject();
            TV.setText(stu.toString());
            Log.d("","======="+stu.toString());

        } catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally {
            if (ois!=null){
                try {
                    ois.close();//结束此流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    private void writerToExternal() {
//        File cachDir=getExternalCacheDir();

        File externalCacheDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);//获取路径

        ObjectOutputStream oos=null;
        try {
            oos=new ObjectOutputStream(new FileOutputStream(new File(externalCacheDir,"stu.dat")));
            oos.writeObject(new Student("小白",18));//写入数据

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (oos!=null){
                try {
                    oos.close();//结束此流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    private void readFromFile() {
        FileInputStream fis=null;
        BufferedReader bufferedReader=null;
        try {
            fis=openFileInput("text.txt");//返回FileInputStream对象
            bufferedReader=new BufferedReader(new InputStreamReader(fis));
            String line;
            while ((line=bufferedReader.readLine())!=null){//读取一个文本行,并判断不为空
                Log.d("","======="+line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (bufferedReader!=null){
                try {
                    bufferedReader.close();//关闭此流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }

    private void writeToFileBtn() {

        FileOutputStream fis=null;
        BufferedWriter writer=null;

        try {
            //MODE_PRIVATE如果文件不存在,可以创建;如果存在,内容覆盖
            //MODE_APPEND如果问津不参展,可以创建;如果存在,在文件末尾追加
            fis=openFileOutput("text.txt",MODE_PRIVATE);//返回FileOutputStream对象
            writer=new BufferedWriter(new OutputStreamWriter(fis));

            writer.write("我在海风智云");
            writer.newLine();//写入一个分隔符
            writer.flush();//刷新缓冲区

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (writer!=null){
                try {
                    writer.close();//关闭此流
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值