android 之数据存储分类

A.Shared Preferences:存储私有的数据以键值对的形式

B.内部存储:在设备的内存中存储私有数据

C.外部存储:在外部设备(手机SDCard等)存储共享数据

D.SQLite数据库存储:存储结构化数据

F.网络存储:将Android手机端的数据存储到远程服务器中,

分类:

基于HTTP协议:

1.HttpURLConnection

2.HttpClient

基于Socket通信:

1.TCP

2.UDP

sharedPreferences进行数据读写的操作具体步骤:

示例代码:

主类的:

package com.hsj.example.sharedprefereneddemo01;import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;import com.hsj.example.sharedprefereneddemo01.service.SharedPreferenceService;/*** 面试题:在android中常用的数据存放方式有哪些?*      A:SharedPreferences(共享参数配置):存储原始简单类型的数据,以键值对的形式存储的*      B:InternalStorage(内部存储):存储私有数据到设备内存上*      C:ExternalStorage(外部存储):存储公共数据到外部存储设备上,比如SDCard*      D:SQLiteDatabase(数据库存储):存储结构化的数据*      E:NetConnectionStorage(通过网络连接进行远程数据存储)****/
public class MainActivity extends AppCompatActivity {private EditText editText_userName;private EditText editText_password;/*** 生成共享参数对象*/private SharedPreferences sharedPreferences;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SharedPreferenceService preferenceService=new SharedPreferenceService(this);preferenceService.write();preferenceService.read();System.out.println("======");preferenceService.readAll();/*通过调用getSharedPreferences(文件名, 文件的操作模式):得到SharedPreferences 对象;第一个参数表示文件名,第二个参数表示文件的操作模式:Context.MODE_PRIVATE:私有模式,使用该模式创建的文件只能在本应用程序中访问,其它应用程序不能访问,如果多次向文件中写入内容,则后写入的内容会覆盖之前写的内容Context.MODE_APPEND:追加模式,作用和私有模式相同,但如果多次写入数据会在之前内容的后面追加内容,之前的内容不会被覆盖的Context.MODE_WORLD_READABLE(1):使用该模式创建的文件,其它应用程序可以读取,但不能写入Context.MODE_WORLD_WRITEABLE(2):使用该模式创建的文件,其它应用程序可以写入,但不能读取.如果想实现全局可读写咋办?A:Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLEB:Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE位与(&)的运算规律:同时为1才为1位或(|)的运算规律:一个为1即为10000 0001|0000 0010================0000 0011注意:文件名不要加扩展名,系统会自动给我们加上.xml, 因此下面的 代码生成的文件名为:hsj.xml*///this.sharedPreferences=this.getSharedPreferences("hsj", Context.MODE_PRIVATE);//this.getPreferences(Context.MODE_PRIVATE):没有指定文件名,此时生成文件的名字为:当前Activity的简单类名.xml,即:MainActivity.xmlthis.sharedPreferences=this.getPreferences(Context.MODE_PRIVATE);/*总结:this.getSharedPreferences("hsj", Context.MODE_PRIVATE)和this.getPreferences(Context.MODE_PRIVATE)方法的区别:相同点:都可以得到SharedPrefereces 对象不同点:A:语法不同:getSharedPreferences("hsj", Context.MODE_PRIVATE)需要传递文件名和文件的操作模式this.getPreferences(Context.MODE_PRIVATE):只需要传递文件的操作模式即可B: 生成的文件名不同getSharedPreferences("hsj", Context.MODE_PRIVATE)可以手工指定生成文件的名字this.getPreferences(Context.MODE_PRIVATE):生成文件的名字为当前Activity的简单类名.xmlC:应用场合不同:getSharedPreferences("hsj", Context.MODE_PRIVATE):可以应用在不同的Activity 之间读写数据this.getPreferences(Context.MODE_PRIVATE):只能使用当前Activity 读取其中的数据*/System.out.println("sharedPreferences="+this.sharedPreferences);this.editText_userName= (EditText) this.findViewById(R.id.editText_userName);this.editText_password= (EditText) this.findViewById(R.id.editText_password);readData(sharedPreferences);}/*** 读取 SharedPreferences 对象中存储的数据* @param sharedPreferences*/private void readData(SharedPreferences sharedPreferences) {//根据指定的键取值,如果指定的键不存在返回第二个参数指定的默认值作为整个方法的返回值String userName=sharedPreferences.getString("userName","无名");String pwd=sharedPreferences.getString("pwd","");this.editText_userName.setText(userName);this.editText_password.setText(pwd);}public void login(View view){String userName=this.editText_userName.getText().toString();String pwd=this.editText_password.getText().toString();if(TextUtils.isEmpty(userName)){this.editText_userName.setError("用户名必须输入");this.editText_userName.requestFocus();return;}this.editText_password.requestFocus();if(TextUtils.isEmpty(pwd)){this.editText_password.setError("密码必须输入!");this.editText_password.requestFocus();return;}if("admin".equals(userName) && "123".equals(pwd)){Toast.makeText(this,userName+"登录成功!",Toast.LENGTH_LONG).show();saveData(userName,pwd);}else {Toast.makeText(this,"用户名或者密码错误!",Toast.LENGTH_LONG).show();}}/*** 存储数据* 使用SharedPreferences 完成数据存储时数据存在在:/data/data/应用程序主包名/shared_prefs/文件名* 里面生成的文件内容为:*<?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><string name="userName">admin</string><string name="pwd">123</string></map>* @param userName 用户名* @param pwd 密码*/private void saveData(String userName, String pwd) {//2.通过调用SharedPreferences 对象的edit()方法得到Editor对象SharedPreferences.Editor editor=sharedPreferences.edit();//3.调用editor 对象的putxxx()方法完成数据的设定,xxx 代表数据类型editor.putString("userName",userName);editor.putString("pwd",pwd);//4.调用editor对象的commit()方法提交数据完成持久化操作editor.commit();}public void reset(View view){this.editText_userName.setText(null);this.editText_password.setText(null);this.editText_userName.requestFocus();}
}

service:

package com.hsj.example.sharedprefereneddemo01.service;import android.content.Context;
import android.content.SharedPreferences;import java.util.HashSet;
import java.util.Map;
import java.util.Set;/*** Created by hsjwcf on 2018/6/14.*/
public class SharedPreferenceService {private SharedPreferences sharedPreferences;public SharedPreferenceService(Context context){sharedPreferences=context.getSharedPreferences("wcf",Context.MODE_PRIVATE);}/***** <?xml version='1.0' encoding='utf-8' standalone='yes' ?><map><long name="idcard" value="1112223344" /><boolean name="isMarried" value="true" /><float name="salary" value="30000.0" /><int name="age" value="20" /><string name="name">赵丽颖</string><set name="phones"><string>111234511</string><string>111234589</string><string>111234556</string><string>111234533</string></set></map>* 写数据*/public void write(){SharedPreferences.Editor editor=sharedPreferences.edit();editor.putString("name","赵丽颖");editor.putInt("age",20);editor.putFloat("salary",30000);editor.putBoolean("isMarried",true);editor.putLong("idcard",1112223344);Set<String> phones=new HashSet<>();phones.add("111234556");phones.add("111234589");phones.add("111234511");phones.add("111234533");editor.putStringSet("phones",phones);editor.commit();}/*** 读取数据*/public void read(){String name=sharedPreferences.getString("name","无名");int age=sharedPreferences.getInt("age",-1);float salary=sharedPreferences.getFloat("salary",10000);boolean isMarried= sharedPreferences.getBoolean("isMarried",false);long idCard=sharedPreferences.getLong("idCard",00000000);Set<String> set=new HashSet<>();set.add("00000000");set.add("11111111");Set<String> phones=sharedPreferences.getStringSet("phones",set);System.out.println("name="+name+",age="+age+",salary="+salary+",isMarried="+isMarried+",idCard="+idCard+",phones="+phones);}public void readAll(){Map<String,?> map= sharedPreferences.getAll();System.out.println("map="+map);}}

UI界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入用户名"android:id="@+id/editText_userName" /><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPassword"android:hint="请输入密码"android:ems="10"android:id="@+id/editText_password" /><LinearLayoutandroid:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:layout_gravity="center_horizontal"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="登录"android:onClick="login"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="重置"android:onClick="reset"/></LinearLayout>
</LinearLayout>

使用内部存储读写数据的操作步骤:

1.调用上下文对象的openFileInput(文件名)得到文件输入流对象

fileinputStream = fileInputStream = this.context.openfileInput(xxx.txt);

2.读取数据

byte[] buffer = new byte[1024];

int len = fileinputStream.read(buffer);

String info = new String(buffer,0,len);

3.关闭文件输入流对象

fileInputStream.close();

实例代码:

业务逻辑代码:

UI界面代码:

使用外部存储读写数据的操作步骤:

1.判断手机的SDCard是否存在并且可用

String state = Environment.getExtrnalStorageState();

2.得到外部存储设备的根目录并组拼出写入数据文件

File root = Environment.getExernalStorageDirectoy();

file destFile = new File(root,"sddcard.bak");

3.使用组拼出的文件包装成输入流对象

inputStream = new FileInputStream(destFile);

4.使用输入流读取数据

byte[] buffer = new byte[1024];

int len = 0;

while((len = inputStream.read(buffer)) != -1){

sb.append(new String(buffer,0,len));

}

5.关闭输入流

inputStream.close();

业务逻辑代码:

UI界面代码:

android 之SharedPreferences,SDCard以及网络存储相关推荐

  1. Android中的5种数据存储方式

    Android中的5种数据存储方式 Android中的5种数据存储方式 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用SharedPref ...

  2. Android之利用SharedPreferences进行简单数据存储

    1.SharedPreferences是Android系统提供的轻量级的数据保存方式,是将数据以最简单的方式进行永久性保存,在应用程序的使用中,用户经常会根据自己的习惯和偏好等更改应用程序的设置,或设 ...

  3. 【慢慢学Android】:2.SharedPreferences对数据的存储

       SharedPreferences简介:                                                                          Sha ...

  4. Android:使用SharedPreferences进行数据存储

    使用SharedPreferences进行数据存储 目录 访问SharedPreferences中的数据 案例: string.xml文件 main.xml布局文件 SpActivity 如何访问其他 ...

  5. 深入剖析Android中最简单的数据存储方式:SharedPreferences

    目录 一. 使用SharedPreferences存储数据 二. 数据的存储位置和格式 三.存储数据的获取 四. 存取复杂类型的数据 五. 设置数据文件的访问权限 Hello,你好呀,我是灰小猿,一个 ...

  6. Android 保存QQ密码(数据存储:文件存储、SharedPreferences)

    源码[工程文件]:https://gitee.com/lwx001/saveQQ MainActivity.java: package cn.lwx.saveqq;import android.os. ...

  7. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  8. Android Bmob--免费的网络存储的使用

    免费的网络存储,简单的操作代码,便利的后台使用. 我这里热烈推荐Bmob 我先上一个文档地址https://docs.bmob.cn/data/Android/a_faststart/doc/inde ...

  9. Android使用SharedPreferences存储APP设置参数

    一.什么是SharedPreferences? android.content.SharedPreferences是一个接口,用来获取和修改持久化存储的数据. Android数据持久化方法中最简单的一 ...

最新文章

  1. svn目录结构 php,svn – php代码组织
  2. Page Ability 之间的跳转概念和应用分享
  3. sap idoc techniques
  4. html快速排序,快速排序.html
  5. php基础 简书,PHP入门基础
  6. Android用户界面
  7. u盘linux 修复grub,Ubuntu 18.04与Win10双系统U盘安装后的GRUB2修复
  8. UG/NX二次开发 判断圆柱面是不是孔的方法
  9. 关于红黑树:了解是什么? 为什么设计? 会有什么效果? 什么时候用?
  10. oracle税务运维脚本练习,荣欣Linux运维+Oracle DBA初级+高级全套实战训练
  11. 京东2015校园招聘技术类笔试题
  12. 中国智能音箱争夺战,国外巨头缺席BAT各有心思
  13. 如何在word文档中间插入起始页码!!!
  14. Hadoop——2、hadoop起源于生态
  15. 架设KMS服务器流程启动加载方法
  16. 解决小程序打包不能超过2M的方法
  17. 9个GaussDB常用的对象语句
  18. 知识提取-属性抽取-学习笔记
  19. 熟练掌握skynet,后端开发丨游戏开发轻松搞定丨多线程丨多进程
  20. 如何快速在东方通服务器部署web项目

热门文章

  1. ubuntu12.04中shell脚本无法使用source的原因及解决方法
  2. 如何开发一个能拯救银河系的充电器
  3. BRCM5.02编译五: fatal error: uuid/uuid.h: No such file or directory compilation terminated
  4. 十二、linux GPIO初始化
  5. uboot中添加新型号步骤以及编译方法
  6. PDF页眉页脚怎么设置
  7. 开源工作流程引擎ccflow多人待办处理模式的详解
  8. G.Fast应用将开启 中国光进铜退没白干
  9. java 通用取得 系统硬件信息及 jvm 信息的 jar 包 oshi-core
  10. 这么全的数组去重,你怕不怕?