引言:
在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式: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>
下面看看Activity的代码:
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提交内容。实现后结果如下图:
2、File 我们可以将一些数据直接以文件的形式保存在设备中,下面的例子分别举例说明了对文件的读取和从Sd卡中读写文件。Sd卡中操作,需要在AndroidManifest.xml文件中添加一下许可:
<!-- 在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>
2.1 读写文件方法
写文件方法:
/* * 写文件方法 */ 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; };
2.2 从Sd卡中读写文件
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卡读文件方法:
/* * 从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(); } }
Oncreate()方法源码:
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和网络读写数据下面的博文中会陆续奉上,还望大家多多支持!