引言:
在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式:Preference,File,Sqlite和网络,可以根据程序的实际需求选择合适的存取方式。
1、Preference
使用Preference方式来存取数据,用到了SharedPreferences接口和SharedPreferences.Editor,这连个接口在android.content中。下面以一个例子说明这两个接口的使用。我们经常会有这样的经历,正发短信了别人来了个电话,接了个电话,返回发信息窗口,前面编写的内容还在,本实例就模拟实现这个功能。
界面很简单,一个EditText,一个Button,详细代码如下:
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editTextMsg" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" /> <Button android:id="@+id/buttonSend" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextMsg" android:layout_below="@+id/editTextMsg" android:text="发送" /> </RelativeLayout>
package com.lzugis.preferenctest; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private EditText editTextMsg; private Button buttonSend; //定义临时信息 private static final String Temp_Sms="Temp_Sms"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editTextMsg=(EditText)findViewById(R.id.editTextMsg);//实例化 buttonSend=(Button)findViewById(R.id.buttonSend); SharedPreferences pre=getSharedPreferences(Temp_Sms,MODE_WORLD_READABLE); String content=pre.getString("sms_content", ""); editTextMsg.setText(content); buttonSend.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Intent itent=new Intent(); itent.setClass(MainActivity.this, RwActivity.class); startActivity(itent);//启动另一个Activity } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } protected void onStop(){ super.onStop(); SharedPreferences.Editor editor=getSharedPreferences(Temp_Sms,MODE_WORLD_READABLE).edit(); editor.putString("sms_content",editTextMsg.getText().toString()); editor.commit(); }; }说明:在OnStop方法中保存内容,使用getSharedPreferences().edit()方法获得SharedPreferences.Editor接口,调用getSharedPreferences().edit()的putstring()方法保存短信内容,调用commit提交内容。实现后结果如下图:
<!-- 在sd中创建和删除文件的权限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 向SD卡中的写入权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />界面设计的很简单,一个EditText用来输入内容,一个EditText用来读取内容,两个Button,分别响应对应的事件,代码如下:
<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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".RwActivity" > <EditText android:id="@+id/editTextWrite" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:ems="10" android:inputType="textMultiLine" /> <Button android:id="@+id/buttonWrite" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/editTextWrite" android:layout_below="@+id/editTextWrite" android:text="Write" /> <EditText android:id="@+id/EditTextRead" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/buttonWrite" android:layout_below="@+id/buttonWrite" android:layout_marginTop="25dp" android:ems="10" android:inputType="textMultiLine" > </EditText> <Button android:id="@+id/ButtonRead" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/EditTextRead" android:layout_below="@+id/EditTextRead" android:text="Read" /> </RelativeLayout>
写文件方法:
/* * 写文件方法 */ private void write(String content) { try { FileOutputStream fos=openFileOutput(strFileName,MODE_APPEND); //写内容 fos.write(content.getBytes()); //关闭文件流 fos.close(); } catch(Exception e) { e.printStackTrace(); } }
/*
* 读文件方法
*/
private String read(){
try
{
//实例化文件输出流对象
FileInputStream fis=openFileInput(strFileName);
//定义缓存数组
byte[] buffer=new byte[fis.available()];
//读到缓冲区
fis.read(buffer);
return new String(buffer);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
};
Sd卡写文件方法:
/*
* 写文件到Sd卡方法
*/
public void writeDataToSD(String strMsg)
{
try
{
// 获取File对象,确定数据文件的信息
File file = new File(Environment.getExternalStorageDirectory(),"f.txt");
//判断sd的外部设置状态是否可以读写
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//流的对象
FileOutputStream fos = new FileOutputStream(file);
//将字符串转换成字节数组
byte[] buffer = strMsg.getBytes();
//开始写入数据
fos.write(buffer);
//关闭流的使用
fos.close();
Toast.makeText(RwActivity.this, "文件"+strMsg+"写入成功", 1000).show();
}
}
catch(Exception ex)
{
Toast.makeText(RwActivity.this, "文件写入失败", 1000).show();
}
}
/*
* 从SD卡读文件方法
*/
public void readDataFromSD()
{
try
{
//创建File对象,确定需要读取文件的信息
File file = new File(Environment.getExternalStorageDirectory(),"f.txt");
//FileInputSteam 输入流的对象
FileInputStream fis = new FileInputStream(file);
//准备一个字节数组用户装即将读取的数据
byte[] buffer = new byte[fis.available()];
//开始进行文件的读取
fis.read(buffer);
//关闭流
fis.close();
//将字节数组转换成字符创, 并转换编码的格式
String strMsg = EncodingUtils.getString(buffer, "UTF-8");
edtRead.setText(strMsg);
Toast.makeText(RwActivity.this, "文件读取成功!", 1000).show();
}
catch(Exception ex)
{
Toast.makeText(RwActivity.this, "文件读取失败!", 1000).show();
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rw);
edtWrite=(EditText)findViewById(R.id.editTextWrite);
edtRead=(EditText)findViewById(R.id.EditTextRead);
btnWrite=(Button)findViewById(R.id.buttonWrite);
btnRead=(Button)findViewById(R.id.ButtonRead);
//写内容
btnWrite.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// write(edtWrite.getText().toString());
// Toast.makeText(RwActivity.this, "文件写入成功", 1000).show();
writeDataToSD(edtWrite.getText().toString());
}
});
//读内容
btnRead.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v)
{
// edtRead.setText(read());
// Toast.makeText(RwActivity.this, "文件读取成功", 1000).show();
readDataFromSD();
}
});
}
关于Android中从Sqlite和网络读写数据下面的博文中会陆续奉上,还望大家多多支持!