当前位置: 首页 > news >正文

Android开发-java版:data的存取和SharedPreferences

一、字节流和字符流的存储和读取

1、存储Data到文件中

代码如下,我们逐行解释:

1.创建editText示例,并绑定布局文件中的控件

2.重写onDestroy方法,保证在活动销毁前一定会调用onDestroy里的方法,获取在editText控件中输入的内容,然后调用save()方法

3.先通过openFileOutput()方法能够得到一个FileOutputStream对象,然后借助它构建一个OutputStreamWriter对象,然后使用OutputStreamWriter构建出BufferedWriter对象,然后就可以通过BufferedWriter来将文本写到文件中了

Context类中提供了一个openFIleOutPut()方法,用于将数据存储到指定文件中。

包含两个参数,第一个参数是文件名,第二个参数是文件的操作模式

MODE_PRIVATE:默认的操作模式,写入的内容会覆盖原文件内容

MODE_APPEND:表示如果文件已经存在,就往文件里追加内容,不存在就创建文件

public class MainActivity extends AppCompatActivity {private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText) findViewById(R.id.editText);}protected void onDestroy(){super.onDestroy();String input = editText.getText().toString();save(input);}private void save(String input){FileOutputStream out = null;BufferedWriter writer = null;try {out = openFileOutput("data", Context.MODE_PRIVATE);writer = new BufferedWriter(new OutputStreamWriter(out));writer.write(input);}catch (IOException e ){e.printStackTrace();}finally {try {if(writer != null){writer.close();}}catch (IOException e){e.printStackTrace();}}}

2、从文件中读取Data

对比存储,新增了load()方法

1.首先通过openFileInput()收到了一个FileInputStream对象,然后构建出了InputStreamReader对象,然后用InputStreamReader构建出了BufferedReader对象,然后使用BufferedReader一行行读取,把文件中的内容全部读取出来并放在StringBuilder对象中,返回内容

2.在onCreate()方法中调用load()方法读取文件中存储的文本内容,如果不为null,则调用EditText的setText()方法将内容填充到EditText里,并调用setSelection()方法将光标移动到文本末尾,弹出还原成功的提示

public class MainActivity extends AppCompatActivity {private EditText editText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);editText = (EditText) findViewById(R.id.editText);String inputText = load();if(!TextUtils.isEmpty(inputText)){editText.setText(inputText);editText.setSelection(inputText.length());Toast.makeText(this,"Restoring succeeded",Toast.LENGTH_LONG).show();}}protected void onDestroy(){super.onDestroy();String input = editText.getText().toString();save(input);}private void save(String input){FileOutputStream out = null;BufferedWriter writer = null;try {out = openFileOutput("data", Context.MODE_PRIVATE);writer = new BufferedWriter(new OutputStreamWriter(out));writer.write(input);}catch (IOException e ){e.printStackTrace();}finally {try {if(writer != null){writer.close();}}catch (IOException e){e.printStackTrace();}}}private String load(){FileInputStream in = null;BufferedReader reader = null;StringBuffer content = new StringBuffer();try {in = openFileInput("data");reader = new BufferedReader(new InputStreamReader(in));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的存储和读取

1.SharedPreferences的存储

SharedPreferences是使用键值对的方式来存储数据的,想用SharedPreferences存储数据,首先要获取SharedPreferences对象。

使用Context类中的getSharedPerences方法

此方法接收两个参数,第一个用于指定SharedPreferences文件的名称,不存在则创建一个,第二个参数用于指定操作模式,目前只能选MODE_PRIVATE这一种模式,是默认操作模式,表示只有当前程序才可以对这个SharedPreferences文件进行读写。

public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();editor.putString("name","Tom");editor.putInt("age",28);editor.putBoolean("marred",false);editor.apply();}});}
}

2.SharedPreferences的读取

一系列的put存储方法对应着一系列的get获取方法

public class MainActivity2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Button button = (Button) findViewById(R.id.button);Button button1 = (Button) findViewById(R.id.button1);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic 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);}});button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();editor.putString("name","Tom");editor.putInt("age",28);editor.putBoolean("marred",false);editor.apply();}});}
}

三、记住密码(实践)

在上一篇代码都基础上修改,详情:

Android开发-java版:BroadcastReceiver广播-CSDN博客

增加内容:

1.类结构和变量声明

2.初始化pref和绑定布局中的checkBox组件

3.在onCreate里,读取保存的登录信息,isRemember为true,读取账号和密码

4.在登录方法里,如果选择了“记住密码”,则保存账号和密码

完整代码如下:

public class LoginActivity extends BaseActivity {private SharedPreferences pref;private SharedPreferences.Editor editor;private EditText accountEdit;private EditText passwordEdit;private Button login;private CheckBox remember;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);String preferenceName = getPackageName() + "_preferences";Log.d("PreName",preferenceName);pref = getSharedPreferences(preferenceName,MODE_PRIVATE);accountEdit = (EditText) findViewById(R.id.accountEdit);passwordEdit = (EditText) findViewById(R.id.passwordEdit);remember = (CheckBox) findViewById(R.id.checkbox);login = (Button) findViewById(R.id.login);boolean isRemember = pref.getBoolean("remember_password",false);if(isRemember){String account = pref.getString("account","");String password = pref.getString("password","");accountEdit.setText(account);passwordEdit.setText(password);remember.setChecked(true);}login.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String account = accountEdit.getText().toString();String password = passwordEdit.getText().toString();if(account.equals("admin")&&password.equals("123456")){editor = pref.edit();if(remember.isChecked()){editor.putBoolean("remember_password",true);editor.putString("account",account);editor.putString("password",password);}else {editor.clear();}editor.apply();Intent intent = new Intent(LoginActivity.this, MainActivity2.class);startActivity(intent);finish();}else {Toast.makeText(LoginActivity.this,"错误",Toast.LENGTH_LONG).show();}}});}
}
http://www.dtcms.com/a/607533.html

相关文章:

  • 国外 创意 网站无锡做网站优化价格
  • 上行10m企业光纤做网站如何查询网站备案时间
  • 设计公司网站的主页怎么做西安做效果图的公司
  • 河北建设网官方网站深圳app开发公司排行
  • 有没有网站做胡兼职政和县建设局网站公告
  • 浙江新华建设有限公司网站中国企业500强招聘
  • 网站开发英文论文国内论坛网站有哪些
  • 山东平台网站建设推荐网站模板制作与安装教程视频
  • 柳州网站建设服务h5创建网站
  • 吉林网站备案ps做网站画布多大
  • 深圳集智邦是网站建设公司安康信息平台
  • XHLJ2021-easykernel之 seq_operations结合pt_regs
  • 网站怎么备份wordpress edd插件
  • 出格做网站学生个人网页制作html报告
  • 在 Oracle Data Guard 环境中,手工将备库(Standby)切换为主库(Primary)
  • 网站icp备案证书莱州网络推广公司
  • AI评测趋势一站速览,司南Daily Benchmark专区上线!
  • go语言做的网站动漫设计专业怎么样
  • 优秀企业网站设计要点房子装修价格
  • 什么网站做的好看北京企业建站
  • 天通苑网站建设成都制作网站提供商
  • 学网站开发需要学那些电商网站可维护性
  • 一个空间可以做两个网站吗前端培训机构哪个最好
  • 7.1 Dify开发平台简介:面向零基础人员的Agent开发平台
  • 中国app排行榜优化大师官网下载安装
  • 网站不更新即商通网站建设推广
  • 如皋做网站wordpress注册会员无法收到邮件
  • c语言编译过程五步骤 | 深入解析编译流程的关键环节
  • 网站开发自学时间财务软件定制开发
  • 在线销售型网站做网站要备案