前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓中的数据存取

安卓中的数据存取

作者头像
lzugis
发布2018-10-23 16:03:09
1.2K0
发布2018-10-23 16:03:09
举报

引言:

在我们每天使用的手机设备中,无时无刻都在进行着数据的存和取。安卓作为一种手机操作系统,提供了如下方式的数据存取方式: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和网络读写数据下面的博文中会陆续奉上,还望大家多多支持!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2013年12月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档