安卓中的数据存取

2018-10-23 16:03:09 浏览数 (1)

引言:

在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式:Preference,File,Sqlite和网络,可以根据程序的实际需求选择合适的存取方式。

1、Preference

使用Preference方式来存取数据,用到了SharedPreferences接口和SharedPreferences.Editor,这连个接口在android.content中。下面以一个例子说明这两个接口的使用。我们经常会有这样的经历,正发短信了别人来了个电话,接了个电话,返回发信息窗口,前面编写的内容还在,本实例就模拟实现这个功能。

界面很简单,一个EditText,一个Button,详细代码如下:

代码语言:javascript复制
<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的代码:

代码语言:javascript复制
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文件中添加一下许可:

代码语言:javascript复制
<!-- 在sd中创建和删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 向SD卡中的写入权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

界面设计的很简单,一个EditText用来输入内容,一个EditText用来读取内容,两个Button,分别响应对应的事件,代码如下:

代码语言:javascript复制
<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 读写文件方法

写文件方法:

代码语言:javascript复制
        /*
	 * 写文件方法
	 */
	private void write(String content)
	{
		try
		{
			FileOutputStream fos=openFileOutput(strFileName,MODE_APPEND);
			//写内容
			fos.write(content.getBytes());
			//关闭文件流
			fos.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}

读文件方法:

代码语言:javascript复制
	/*
	 * 读文件方法
	 */
	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卡写文件方法:

代码语言:javascript复制
	/* 
	 * 写文件到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卡读文件方法:

代码语言:javascript复制
	/*
	 * 从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()方法源码:

代码语言:javascript复制
	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和网络读写数据下面的博文中会陆续奉上,还望大家多多支持!

0 人点赞