青岛跨海大桥:Android持久化手艺

admin 5个月前 (06-07) 科技 54 1

目录
  • 文件存储
    • 将数据存储到文件中
    • 从文件中读取数据
  • SharedPreferences存储
    • 将数据存储到SharedPreferences中
      • 步骤
    • 从SharedPreferences中读取数据
      • 步骤
  • 实例:用SharedPreferences实现记着密码功效

瞬时数据是指存储在内存中的数据。持久化手艺可以将内存中的数据和持久状态(保留在存储装备上)之间相互转化。
Android提供了三种持久化方式

文件存储

文件存储纰谬存储内容举行任何的格式化处置,所有数据都是原封不动保留到文件当中。

将数据存储到文件中

Context类中提供了一个openFileOutput()方式,返回一个FileOutputStream工具,然后就可以用javaI/O流去写文件中了。文件都默认放在/data/data/ /files/目录下。

public void save(String data){
        FileOutputStream out=null;
        BufferedWriter writer=null;
        try{
            out=openFileOutput("data", Context.MODE_PRIVATE);//第一个参数是文件的名称,第二个参数是模式。MODE_PRIVATE示意笼罩,MODE_APPEND示意追加。
            writer=new BufferedWriter(new OutputStreamWriter(out));
            writer.write(data);
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if(writer!=null)
                 writer.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

从文件中读取数据

Context类还提供了一个openFileInput(),返回的是一个FileInputStream。它吸收一个参数,即要读取的文件名。然后系统会去/data/data/ /files/目录下寻找。

public String load(String name){
        FileInputStream input=null;
        BufferedReader reader=null;
        StringBuilder content=new StringBuilder();
        try {
            input=openFileInput(name);
            reader=new BufferedReader(new InputStreamReader(input));
            String line="";
            while((line=reader.readLine())!=null){
                content.append(line);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                if(reader!=null)
                    reader.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        return content.toString();
    }

SharedPreferences存储

SharedPreferences是使用键值对的方式来存储数据的

将数据存储到SharedPreferences中

步骤

1.获取SharedPreferences工具

  • Context类中的getSharedPreferences()方式

此方式吸收两个参数,第一个参数用于指定SharedPreferences文件的名称,若是直接的名称文件不存在,则会建立一个文件,SharedPreferences文件都是存放在/data/data/ /shared_prefs/目录下。第二个参数用于指定操作模式,现在只有MODE_WORLD_READABLE这一种模式可选,它是默认的操作模式,和直接传入0效果是相同的,示意只有当前的应用才可以对这个文件举行读写.

  • Activity类中的getPreferences()方式

只吸收一个操作模式参数,由于自动将当前流动的类名看成SharedPreferences的文件名

  • PreferenceManager类中的getDefaultSharedPreferences()方式

这是一个静态方式,它吸收一个Context参数,并自动使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

2.向SharedPreferences中存储数据

(1)挪用SharedPreferences工具的edit()方式来获取一个SharedPreferences.Editor工具
(2)向SharedPreferences.Editor工具中添加数据,好比添加一个布尔型数据就使用putboolean()方式等
(3)挪用apply()方式将添加的数据提交,从而完成数据存储操作

从SharedPreferences中读取数据

步骤

1.获取SharedPreferences工具
2.从SharedPreferences中读取数据

直接使用SharedPreferences工具的getxxx(键,默认值)方式获取对应类型值

实例:用SharedPreferences实现记着密码功效

1.新建LoginActivity流动
结构:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:text="Account:"
            android:textSize="18dp"
            android:layout_gravity="center"/>
        <EditText
            android:id="@+id/account"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:layout_width="90dp"
            android:layout_height="wrap_content"
            android:text="Password:"
            android:textSize="18dp"
            android:layout_gravity="center_vertical"
            />
        <EditText
            android:id="@+id/password"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:layout_gravity="center_vertical"/>
    </LinearLayout>
    <CheckBox
        android:id="@+id/remeber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="remember password"/>
    <Button
        android:id="@+id/login"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Login"/>

</LinearLayout>

LoginActivity类:

ublic class LoginActivity extends AppCompatActivity {
    private SharedPreferences sharedPreferences;
    private SharedPreferences.Editor editor;
    private EditText account;
    private EditText password;
    private CheckBox isRemeber;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        sharedPreferences= PreferenceManager.getDefaultSharedPreferences(this);

        account=(EditText)findViewById(R.id.account);
        password=(EditText)findViewById(R.id.password);
        isRemeber=(CheckBox)findViewById(R.id.remeber);
        if(sharedPreferences.getBoolean("isRemeber",false)){//之前记着过密码
            account.setText(sharedPreferences.getString("account",""));
            password.setText(sharedPreferences.getString("password",""));
            isRemeber.setChecked(true);
        }
        Button button=(Button)findViewById(R.id.login);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String accountstr=account.getText().toString();
                String passwordstr=password.getText().toString();
                if(accountstr.equals("admin")&&passwordstr.equals("123456")) {
                    editor=sharedPreferences.edit();
                    if (isRemeber.isChecked()) {//选择记着密码
                        editor.putBoolean("isRemeber",true);
                        editor.putString("account", accountstr);//保留账户
                        editor.putString("password", passwordstr);//保留密码
                    }else{
                        editor.clear();//若是没选中说明清空
                    }
                    editor.apply();//运行
                    Intent intent=new Intent(LoginActivity.this,MainActivity.class);
                    startActivity(intent);
                    finish();
                }else{
                    Toast.makeText(LoginActivity.this,"account or password is invald",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }
}
,

Sunbet

www.0-577.com欢迎您的加入。

皇冠APP声明:该文看法仅代表作者自己,与本平台无关。转载请注明:青岛跨海大桥:Android持久化手艺

网友评论

  • (*)

最新评论

  • 联博统计接口 2020-06-07 00:38:08 回复

    Allbetwww.4008785311.com欢迎进入欧博开户平台(Allbet Gaming),欧博开户平台开放欧博(Allbet)开户、欧博(Allbet)代理开户、欧博(Allbet)电脑客户端、欧博(Allbet)APP下载等业务作者明白人

    1

标签列表

    文章归档

    站点信息

    • 文章总数:552
    • 页面总数:0
    • 分类总数:8
    • 标签总数:974
    • 评论总数:162
    • 浏览总数:3552