当前位置: 代码迷 >> Android >> android的数据储存和访问 附源码
  详细解决方案

android的数据储存和访问 附源码

热度:103   发布时间:2016-05-01 13:57:36.0
android的数据存储和访问 附源码
android提供了几种文件的存储方式;
1.文件:
2.SharedPreferences存储类似软件的配置参数设置的内容;这是一个类;
3.sqlite数据库 android内嵌的数据库,和微软的excel数据库原理一样,当你创建一个数据库时是以文件的形式存放的;sql语句很类似的;
4.网络
5.content provider
/////////////////////////////////////////
我们使用mvc模式开发一个保存文件内容的程序,我们在j2ee的时候是面向接口编程,可以降低耦合,在android中还是尽量避免使用太多的类,一是效率 二是手机内存不大,内部类是个不错的选择
先写业务层DataManager.java
package cn.lee.Manager;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class DataManager {	/**	 * 没有使用成员变量的方法可以定义为静态方法	 * 保存数据的业务逻辑	 * OutputStream 输出流	 * content 文件内容	 * @throws Exception 	 */	public static void saveDate (OutputStream outputStream , String contentString) throws Exception	{		outputStream.write(contentString.getBytes());		outputStream.close();	}	/**	 * 读取数据的业务逻辑	 * @param InputStream	 * @param contentString	 * @throws Exception	 */	public static  String readDate (InputStream inputStream ) throws Exception	{		byte [] byte1 = new byte[1024];		/**		 * 当输入流读到文件的末尾 返回就是-1 		 */		int length = inputStream.read(byte1);		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();		if(length!=-1)		{			//读到的内容存在内存中ByteArrayOutputStream 这个类用于将byte流存储在内存中						byteArrayOutputStream.write(byte1, 0, length);		}		String dateString =   byteArrayOutputStream.toString();		byteArrayOutputStream.close();		inputStream.close();		return dateString;	}}

再来测试这个业务层DateManagerTest .java
package cn.lee.data;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.OutputStream;import cn.lee.Manager.DataManager;import android.content.Context;import android.test.AndroidTestCase;import android.util.Log;public class DateManagerTest extends AndroidTestCase {		private static final String TAG="DateManagerTest";	public void testSave ()throws Exception {		/**		 * 内容先定义成固定的内容		 *  Activity的父类的父类就是context,context与其他框架中的context相同为我们以供了一些核心操作工具。		 *  openFileOutput("fileName", Context.MODE_PRIVATE);		 *  参数1:文件的名字 不能包含路径分隔符‘/’ 		 *  使用这个方法创建的文件,会保存在手机/date/date/应用文件夹(这里就是cn.lee.data)/files目录下;		 *  /date/date/cn.lee.data/files/fileName.txt 我们可以在window-show view -other-android-file explore看到		 *  这是有android决定的;		 *  参数2:保存的模式:  		 *  使用context中的文件输出流它有四种模式:		 *  文件读写的操作模式:		 *      Context.MODE_PRIVATE=0:只能是当前的应用才能操作文件 如果创建的文件已经存在 新内容覆盖原内容		 *      Context.MODE_APPEND=32768:新内容追加到原内容后 这个模式也是私有的 这个文件只能被创建文件的应用所访问		 *      Context.MODE_WORLD_READABLE=1:允许其他应用程序读取本应用创建的文件		 *      Context.MODE_WORLD_WRITEABLE=2:允许其他应用程序写入本应用程序创建的文件,会覆盖原数据。       				 */		        FileOutputStream fileOutputStream = this.getContext().openFileOutput("fileName.txt", Context.MODE_PRIVATE);		DataManager.saveDate(fileOutputStream, "xxxxxxx");	}	public void  testRead() throws Exception{		FileInputStream fileInputStream = this.getContext().openFileInput("fileName.txt");		String contentString = DataManager.readDate(fileInputStream);		Log.i(TAG, contentString);	}}

设计界面main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"	android:orientation="vertical" android:layout_width="fill_parent"	android:layout_height="fill_parent">	<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"		android:orientation="vertical" android:layout_width="fill_parent"		android:layout_height="wrap_content">		<TextView android:layout_width="wrap_content"			android:layout_height="wrap_content" android:text="@string/hello"			android:id="@+id/filenameTesxwiew" />		<EditText android:layout_width="60px"			android:layout_toRightOf="@id/filenameTesxwiew"			android:layout_alignTop="@id/filenameTesxwiew" android:layout_height="wrap_content"			android:id="@+id/fileName" />	</RelativeLayout>	<TextView 	android:layout_width="fill_parent"	android:layout_height="wrap_content" 	android:text="@string/contentlable" />	<EditText	android:layout_width="fill_parent"	android:layout_height="wrap_content" 	android:minLines="5"	android:id="@+id/fileContent" />	<Button 	android:layout_width="wrap_content"	android:layout_height="wrap_content"	android:text="@string/buttontext" 	/></LinearLayout>

设计activity AboutDateActivity.java
package cn.lee.data;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import cn.lee.Manager.DataManager;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class AboutDateActivity extends Activity {	private EditText fileNameEditText;	private EditText fileContentEditText;	private Button button;	private static final String TAGSTRING ="AboutDateActivity";	/** Called when the activity is first created. */	@Override	public void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main);		fileNameEditText = (EditText) this.findViewById(R.id.fileName);		fileContentEditText = (EditText) this.findViewById(R.id.fileContent);		button = (Button) this.findViewById(R.id.button);		button.setOnClickListener(new OnClickListener() {					public void onClick(View v) {				int info = R.string.sus;				String fileNameString = fileNameEditText.getText().toString();				String fileContentString = fileContentEditText.getText()						.toString();				// TODO Auto-generated method stub				FileOutputStream fileOutputStream = null;				try {					fileOutputStream = AboutDateActivity.this							.openFileOutput(fileNameString, Context.MODE_PRIVATE);					DataManager.saveDate(fileOutputStream, fileContentString);									} catch (Exception e) {					// TODO Auto-generated catch block					Log.i(TAGSTRING, e.toString());					info = R.string.infor;				}finally{					try {						fileOutputStream.close();					} catch (IOException e) {						// TODO Auto-generated catch block						Log.i(TAGSTRING, e.toString());						info = R.string.infor;					}				}				Toast.makeText(AboutDateActivity.this, info, 1).show();			}		});	}}

你试试。
1 楼 struts_2010 2011-07-01  
感谢!
  相关解决方案