第四章 数据存储

一、数据存储方式

1、文件存储

2、shared Preference 本质就是一个xml文件

3、sqlite 有大量相似的结构的数据需要存储的时候

4、内容提供者 content Provider

5、网络存储数据

二、文件存储

  • 授予读写权限:Manifest–>Permissions–>add–>User Permission–>Name为android.permission.WRITE_EXTERNAL_STORAGE
    Android移动应用基础学习——第四章数据存储_第1张图片
  public class MainActivity extends Activity {       private static final String tag = "MainActivity";  private EditText et_qq;  private EditText et_pwd;  private CheckBox cb_remember;  @Override  protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  et_qq = (EditText) findViewById(R.id.et_qq);  et_pwd = (EditText) findViewById(R.id.et_pwd);  cb_remember = (CheckBox) findViewById(R.id.cb_remember);  // 读取用户保存密码的文件  try {       File file = new File(Environment.getExternalStorageDirectory(),  "info.txt");  FileInputStream fis = new FileInputStream(file);  BufferedReader br = new BufferedReader(new InputStreamReader(fis));  String info = br.readLine();  String qq = info.split("##")[0];  String pwd = info.split("##")[1];  et_qq.setText(qq);  et_pwd.setText(pwd);  } catch (Exception e) {       // TODO Auto-generated catch block  e.printStackTrace();  }  }  public void login(View view) {       String qq = et_qq.getText().toString();  String pwd = et_pwd.getText().toString();  if (TextUtils.isEmpty(qq) || TextUtils.isEmpty(qq)) {       Toast.makeText(this, "用户名密码不能为空", Toast.LENGTH_SHORT).show();  } else {       // 登录操作  // 判断用户是否勾选了记住密码  if (cb_remember.isChecked()) {       // 记住密码  Log.i(tag, "记住密码");  // 保存用户qq和密码  try {       //判读sd卡状态是否有,是否可以被读写  String status = Environment.getExternalStorageState();  Environment.getExternalStorageDirectory().getFreeSpace();  if (Environment.MEDIA_MOUNTED.equals(status)) {       File file = new File(  Environment.getExternalStorageDirectory(),  "info.txt");  FileOutputStream fos = new FileOutputStream(file);  // 用##作分隔符  String info = qq + "##" + pwd;  fos.write(info.getBytes());  fos.close();  Toast.makeText(this, "保存密码成功", 0).show();  } else {       Toast.makeText(this, "sd卡不可写,请检查sd卡状态", 0).show();  }  } catch (Exception e) {       e.printStackTrace();  Toast.makeText(this, "保存密码失败", 0).show();  }  } else {       // 不需要记住密码  Log.i(tag, "不需要记住密码");  }  }  }  }

三、存储用户信息案例

Android移动应用基础学习——第四章数据存储_第2张图片

  • OnCreate方法

Android移动应用基础学习——第四章数据存储_第3张图片

  • 存储按钮

Android移动应用基础学习——第四章数据存储_第4张图片

  • 读取按钮

Android移动应用基础学习——第四章数据存储_第5张图片

四、XML序列化

  • 解析xml

Android移动应用基础学习——第四章数据存储_第6张图片

  • 代码(xml序列化:加密qq与pwd)

Android移动应用基础学习——第四章数据存储_第7张图片

习题:Android中使用serializer对象生成xml 文档开头的方法是( start Document )

五、XML解析

  • 文件访问权限

Android移动应用基础学习——第四章数据存储_第8张图片

  • 解析xml之预报–MainActivity
  public class MainActivity extends Activity {         @Override    protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    TextView tv_info=(TextView)findViewById(R.id.tv_info);    ImageView iv_info=(ImageView)findViewById(R.id.iv_info);    // 上下文,实际上就是一个环境    AssetManager am = this.getAssets();    try {         WeatherInfo weatherInfo=new WeatherInfo();    // 得到文件的输入流    InputStream is = am.open("weather.xml");    // 解析xml文件(sax dom dom4j pull解析)    // 声明一个pull解析器    XmlPullParser parser = Xml.newPullParser();    // 初始化解析器,设置解析哪个流,用什么样的编码    parser.setInput(is, "utf-8");    // 获取事件的类型    int type = parser.getEventType();    while(type!=XmlPullParser.END_DOCUMENT){         if(type==XmlPullParser.START_TAG){         if("name".equals(parser.getName())){         String name=parser.nextText();    weatherInfo.setName(name);    }else if("weather".equals(parser.getName())){         String weather=parser.nextText();    weatherInfo.setWeather(weather);    }else if("temp".equals(parser.getName())){         String temp=parser.nextText();    weatherInfo.setTemp(temp);    }else if("info".equals(parser.getName())){         String info=parser.nextText();    weatherInfo.setInfo(info);    }    }    type=parser.next();    }    //Toast.makeText(this, weatherInfo.toString(), 1).show();            tv_info.setText(weatherInfo.toString());            //根据天气类型,设置图片weatherInfo.getweather()            iv_info.setImageResource(R.drawable.ic_launcher);           } catch (Exception e) {         e.printStackTrace();    }    }    }
  • assets目录下WeatherInfo.xml(一般是在服务器获取)
<?xml version="1.0" encoding="utf-8"?><city id='2'>    <name>郑州</name>    <weather>多云</weather>    <temp>20</temp>    <info>请穿个大棉袄</info> </city>

六、Shared Preferences

Android移动应用基础学习——第四章数据存储_第9张图片

  • 实例

Android移动应用基础学习——第四章数据存储_第10张图片

  • 存数据

Android移动应用基础学习——第四章数据存储_第11张图片

  • 取数据

Android移动应用基础学习——第四章数据存储_第12张图片

习题:Android获取到SharedPreferences对象sp后,保存数据正确的逻辑是(  sp.edit().putString("name","zhangsan").commit(); )

七、QQ登录案例

  • onCreate方法

Android移动应用基础学习——第四章数据存储_第13张图片

  • 点击事件

Android移动应用基础学习——第四章数据存储_第14张图片

更多相关文章

  1. Android 截取屏幕图片并保存
  2. android手机图片查看
  3. android 图片双缓存,开源框架 universali image loader
  4. Android实现在webview中长按图片弹出菜单保存图片
  5. Android快速开发框架之xUtils---图片模块
  6. Android ImageView图片自适应大小
  7. Android主题配置-基础

随机推荐

  1. 我是一名Coder
  2. Android开发从零开始之java-数据类型
  3. Android(安卓)7.0 行为变更
  4. Android中MVP模式讲解及实践
  5. Android-小巫新闻客户端底部菜单切换实现
  6. 微信授权APP第三方登录(Android)
  7. 成功的向android推送信息——android推技
  8. 基础总结篇之四:Service完全解析
  9. [原]零基础学习在Android进行SDL开发后记
  10. 传智播客—Android(三)数据存储之XML解析技