第四章 数据存储

一、数据存储方式

1、文件存储

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

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

4、内容提供者 content Provider

5、网络存储数据

二、文件存储

  • 授予读写权限:Manifest–>Permissions–>add–>User Permission–>Name为android.permission.WRITE_EXTERNAL_STORAGE
  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, "不需要记住密码");  }  }  }  }

三、存储用户信息案例

  • OnCreate方法

  • 存储按钮

  • 读取按钮

四、XML序列化

  • 解析xml

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

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

五、XML解析

  • 文件访问权限

  • 解析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获取到SharedPreferences对象sp后,保存数据正确的逻辑是(  sp.edit().putString("name","zhangsan").commit(); )

七、QQ登录案例

  • onCreate方法

  • 点击事件

更多相关文章

  1. Android之SDK、NDK、JNI和so文件
  2. 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue
  3. Android(安卓)Duplicate files copied in APK
  4. 理解 Android(安卓)Build 系统
  5. Android资源类型、结构、使用
  6. Android(安卓)截取屏幕图片并保存
  7. 将war包部署到android服务器上
  8. Android(安卓)Studio 简单介绍和使用问题小结
  9. NPM 和webpack 的基础使用

随机推荐

  1. android APK签名过程之CERT.SF分析
  2. Android调用系统发送短信界面
  3. android参考--发送短信
  4. activity 标签总结1
  5. android 暗水印
  6. Android(安卓)AlertDialog有EditText无法
  7. android:windowSoftInputMode属性使用
  8. Android(安卓)startActivityForResult的
  9. android 4.4以下loadIocn nullpointerExc
  10. 判断Android设备是否连接网络