zoukankan      html  css  js  c++  java
  • 安卓中的数据存取

    引言:

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


  • 相关阅读:
    EveryOne Piano
    3D扫描商店
    Substance PBR Guide
    C2GOASM
    Unity调试外部DLL
    BinaryReader优化
    IL
    如何画头发
    Bitrix24
    Mac查找包含指定字符串的文件
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539920.html
Copyright © 2011-2022 走看看