1. android的存储方式主要分为:1)本地的文本存储;2)数据库存储
存储方法:1)SharedPreference 存储:适用于简单的数据保存例如属性文件
2)文件存储数据:常用方式,可保存较大数据,可存储在系统或者SD卡中
3)SQLite数据库存储:以数据库形式存储数据
4)ContentProvider存储数据:为存储和获取提供统一接口,主要用于程序间数据共享
5)网络存储:通过网络来存储获取数据,主要应用在网络相关的应用中
2. 文件结构
1)系统文件:主要存储在\system文件夹下,子文件夹有,app,bin,etc,media等。更改读取等操作需要roots权限
2)数据文件:主要存储在\data文件夹下,子文件夹有,app,backup,data等,主要存储着应用程序以及应用中产生的临时数据等信息。data文件夹下的没有权限的程序不能相互访问数据,保护私有数据
3)外部存储:对于较大的文件一般会存储在SD卡等外部存储中。只要有访问SD卡权限就能够访问其中所有文件,数据安全性较低
3. 5种测试方法的实例
1)SharedPreference 存储:以一个登陆界面来演示
如下是.xml 和.java 文件代码
程序中将用户名user 和密码 pass 通过SharedPreference 存储,当再次打开应用时,由initView();方法把上次的配置信息直接显示在界面上
通过SharedPreferences userinfo = getSharedPreferences("user_info",0);获得SharedPreferences对象
通过userinfo.edit().putString("name",user.getText().toString()).commit();存储数据,利用对象的edit接口的putString方法保存,最终的提交是通过commit()来完成的
在initView();中可以看到,获取数据是通过SharedPreferences对象userinfo的getString方法实现的。
点击(此处)折叠或打开
- package com.example.warrior.sharedpreferencetest;
- import android.app.Activity;
- import android.content.SharedPreferences;
- import android.support.v7.app.ActionBarActivity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.MotionEvent;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.ImageButton;
- public class MainActivity
extends Activity
{
- private EditText user
= null;
- private EditText password
= null;
- private ImageButton loginBtn
= null;
- @Override
- protected
void onCreate(Bundle savedInstanceState)
{
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- user =
(EditText)findViewById(R.id.user);
- password =
(EditText)findViewById(R.id.pass);
- loginBtn =
(ImageButton)findViewById(R.id.loginButton);
- initView();
- loginBtn.setOnTouchListener(new
View.OnTouchListener()
{
- @Override
- public
boolean onTouch(View v, MotionEvent
event)
{
- if(event.getAction()==MotionEvent.ACTION_DOWN){
- v.setBackgroundResource(R.drawable.b2);
- SharedPreferences userinfo = getSharedPreferences("user_info",0);
- userinfo.edit().putString("name",user.getText().toString()).commit();
- userinfo.edit().putString("pass",password.getText().toString()).commit();
- }
- else
if(event.getAction()==MotionEvent.ACTION_UP){
- v.setBackgroundResource(R.drawable.b3);
- }
- return false;
- }
- });
- }
- private void initView(){
- SharedPreferences userInfo = getSharedPreferences("user_info",0);
- String username
= userInfo.getString("name","");
- String pass
= userInfo.getString("pass","");
- user.setText(username);
- password.setText(pass);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu
menu)
{
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_main,
menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem
item)
{
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id
= item.getItemId();
- //noinspection SimplifiableIfStatement
- if (id
== R.id.action_settings)
{
- return true;
- }
- return
super.onOptionsItemSelected(item);
- }
- }
点击(此处)折叠或打开
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:orientation="vertical"
- android:background="@drawable/b1"
- tools:context=".MainActivity">
- <EditText
- android:layout_width="185dp"
- android:layout_height="40dp"
- android:id="@+id/user"
- android:hint="enter your name"
- android:singleLine="true"
- android:layout_alignParentTop="true"
- android:layout_alignLeft="@+id/pass"
- android:layout_marginTop="66dp"
- />
- <EditText
- android:layout_width="185dp"
- android:layout_height="40dp"
- android:id="@+id/pass"
- android:hint="enter your password"
- android:singleLine="true"
- android:layout_below="@+id/user"
- android:layout_centerHorizontal="true"
- android:layout_marginTop="44dp"
- android:inputType="textPassword"
- />
- <ImageButton
- android:layout_width="100dp"
- android:layout_height="60dp"
- android:id="@+id/loginButton"
- android:background="@drawable/ibtn"
- android:layout_centerVertical="true"
- android:layout_alignRight="@+id/pass"
- android:layout_marginRight="20dp"
- />
- </RelativeLayout>
写操作-》通过FileOutputStream fWriteStream = openFileOutput(filename,MODE_APPEND);声称文件写入对象,通过fWriteStream.write(buffer);方法写入,然后关闭fWriteStream.close();
读操作-》通过FileInputStream fInputStream = openFileInput(filename);创建读操作对象,通过fInputStream.read(buffer);方法读取内容,然后fInputStream.close();关闭。
代码如下
.xml
点击(此处)折叠或打开
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- android:paddingBottom="@dimen/activity_vertical_margin"
- tools:context=".MainActivity">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/text"
- />
- </RelativeLayout>
点击(此处)折叠或打开
- package com.example.warrior.filestreamtest;
- import android.app.Activity;
- import android.support.v7.app.ActionBarActivity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.widget.TextView;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- public class MainActivity
extends Activity
{
- @Override
- protected
void onCreate(Bundle savedInstanceState)
{
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- String fileName
= "fileStreamText.txt";
- String fileContent
= "welcome to android!!"
+"\n\r"+
- "I love it!!";
- String
result = "";
- boolean istrue
= writeFile(fileName,fileContent);
- if(istrue){
- result
+= fileName+"create success!!\n\r";
- }else
{
- result+= fileName+"create failure!!\n\r";
- }
- result
+= readFile(fileName);
- TextView textView =
(TextView)findViewById(R.id.text);
- textView.setText(result);
- }
- /*write content to new file
- *param filename: name of new file
- * param content:the content to be writen into the file
- * return boolean:true/success write into false/failure write into
- */
- public boolean writeFile(String filename
,String content){
- try {
- FileOutputStream fWriteStream
= openFileOutput(filename,MODE_APPEND);
- byte[]
buffer = content.getBytes();
- fWriteStream.write(buffer);
- fWriteStream.flush();
- fWriteStream.close();
- return true;
- }catch
(Exception e){
- e.printStackTrace();
- return false;
- }
- }
- /*read content from file
- *param filename:filename
- * return String
- */
- public String readFile(String filename){
- String readBuffer
= "";
- try {
- FileInputStream fInputStream
= openFileInput(filename);
- int len
= fInputStream.available();
- byte[]
buffer =
new byte[len];
- fInputStream.read(buffer);
- fInputStream.close();
- readBuffer =
new String(buffer);
- }catch
(Exception e){
- e.printStackTrace();
- }
- return readBuffer;
- }
- @Override
- public boolean onCreateOptionsMenu(Menu
menu)
{
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.menu_main,
menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem
item)
{
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id
= item.getItemId();
- //noinspection SimplifiableIfStatement
- if (id
== R.id.action_settings)
{
- return true;
- }
- return
super.onOptionsItemSelected(item);
- }
- }
阅读(7) | 评论(0) | 转发(0) |
- mysql不能导入和创建存储过程...
- 在 CentOS 7.1 上安装分布式存...
- 开发基于高德SDK的Android车载...
- 制作多版本 Fedora 系统安装 U...
- WPF Image赋值的两种方法...