zoukankan      html  css  js  c++  java
  • Android中的数据储存

    数据的储存是一个十分重要的功能,它涉及到各种类型的数据,各种的储存方式,今天就接触了Android中数据储存的简单应用,有一种方式是可以将存入的数据原封不动的存储起来,这里要用到openfileoutput方法这是一个contextWrapper类的一个方法

    这个方法可以理解为创建一个新文件用于存储你写入的数据,传入的name字符串是文件名,mode有两个MODE_PRIVATE和MODE_ADDEND,区别是一个会覆盖同名内容,一个会在原文件中直接添加。如果文件名不存在两种模式都会直接创建新文件。接着就是Java中的流相关的运用,将数据写入刚创建的文件中。

    第二种方法是像一个表格一样去储存数据,一个键值对应一个数据,这就是 SharePreference  类,可以通过 activity.getSharePreferences、PreferenceManager.getDefaultSharedPreference、context.getPrefences三种方法 来得到实例,得到实例后用edit方法获取sharepreferences.editor对象,sharepreferences.editor有一系列的put方法。例如putint等等,传入键值和数据即可,注意要在最后调用edit.apply方法提交数据。而sharepreferences类有许多get方法例如getint,与sharepreferences.editor方法中的put方法相对应

    package com.example.administrator.sharepreferencetest;
    
    import android.content.SharedPreferences;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button saveData=(Button)findViewById(R.id.save_data);
            saveData.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
                    editor.putString("name","Tom");
                    editor.putInt("age",28);
                    editor.putBoolean("married",false);
                    editor.apply();
                }
            });
            Button restoreData=(Button)findViewById(R.id.restore_data);
            restoreData.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    SharedPreferences pref=getSharedPreferences("data",MODE_PRIVATE);
                    String name=pref.getString("name","");
                    int age=pref.getInt("age",0);
                    boolean married=pref.getBoolean("married",false);
                    Log.d("mainactivity","name is "+name);
                    Log.d("mainactivity","age is "+age);
                    Log.d("mainactivity","married is "+married);
                }
            });
        }
    }
    

     mainactivity.java代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
    <Button
        android:text="Save data"
        android:id="@+id/save_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <Button
        android:text="Restore data"
        android:id="@+id/restore_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    </LinearLayout>
    

     配置文件

    这样就可以存储,然后再读取出来。

    但是有一个问题值得我们注意就是,存储的文件在哪里呢?在Android device monitor下的filer explorer中的/data/data/包名/项目名/shared_prefs文件下有一个 存储文件名.xml文件这就是我们存储的地方了,但是这里面有很多的问题,其一是新版的Android studio的下拉目录中没有Android device monitor了,必须到Android studio的sdk下的tools文件下例如C:UsersAdministratorAppDataLocalAndroidSdk ools找monitor应用程序,问题二是找到了monitor应用打开之后file explorer下的data文件打不开导出之后什么也没有,但是程序中明明可以读取存进的数据为什么在这里却没有数据呢?那这就是权限的问题了,推荐的解决方法 https://www.cnblogs.com/zhujiabin/p/6124486.html。但是还有问题三,在模拟器条件下就算是权限问题解决了,但还是不能打开data文件,原来这好像是只支持真机模拟不支持手机模拟器。注意到所有的问题后你就能随意的存储,读出,并随时查看文件了。

                                                                                                                         

  • 相关阅读:
    【重点】Java大厂面试10个知识点汇总
    TEC-2机微程序设计
    Component 'TABCTL32.OCX'错误的处理方法
    Azure DevOps的使用入门
    Mac + VMware Fusion + Windows 11尝鲜
    Golang接口类型-下篇
    Golang接口类型-上篇
    基于Python实现原生的登录验证码
    一套帮助你理解C语言的测试题(转)
    KMP算法详解
  • 原文地址:https://www.cnblogs.com/wyx66688/p/10667733.html
Copyright © 2011-2022 走看看