Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中的數據存取和IO (第一篇)

Android中的數據存取和IO (第一篇)

編輯:關於Android編程

應用程序都會涉及到數據的輸入、輸出,android應用也不例外。Android中應用程序存儲數據通常有兩種模式:1,數據量少,格式簡單(例如,字符串、標量),使用普通文本就好,可以使用Android系統提供的SharedPreferences保存;2、需要大量的數據存儲訪問,可以借助數據庫,android系統提供了內置SQLite數據庫,而且為訪問數據庫提供了方便的API。本片文章將會詳細講述如何在Android中使用數據庫。

1、使用SharedPreferences訪問key-value對和使用Editor寫入數據

在一些小應用中,比如游戲的玩家積分(飛機大戰之類的)、應用程序的配置信息(是否打開音效、振動等),使用SharedPreferences保存,這個方法保存的數據主要是簡單類型的key-value對。

SharedPreferences提供的成員函數主要有三個:

》boolean contians(String key)

》abstract Map getAll(); 獲取SP數據裡面的全部數據

》boolean getXxx(String key,xxx defVlaue) :獲取key的值。

SharedPreferences並沒有寫入數據的能力,需要調用edit()方法來獲取對應的Editor()。

》SharedPreferences.Editor clear() :清空SharedPreferences裡面所有的額數據

》SharedPreferences.Editor putXxx(String key, xxx value):向SharedPreferences存入key值

》boolean 層哦秘密他() :當完成editot編譯,提交改方法,通常寫在末尾。

SharedPreferences是一個接口,程序無法直接創建SharedPreferences實例,需要通過Context提供getSharedPreferences(Stirng name,int mode)來創建實例。

第二個參數如下:

》Context.MODE_PRIVATE :指定改數據只能被本程序讀寫

》Context.MODE_WORLD_READABLE:可以被其他程序讀,但不能寫

》Context.MODE_WORLD_WRITEABLE:課被其他讀寫。

例程如下:提供兩個按鈕,一個寫入數據,另一個讀取寫入的數據。

1、activity下的.java文件如下:

package org.crazyit.io;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

/**
 * Description:
 * 
site: crazyit.org *
Copyright (C), 2001-2012, Yeeku.H.Lee *
This program is protected by copyright laws. *
Program Name: *
Date: * @author Yeeku.H.Lee [email protected] * @version 1.0 */ public class SharedPreferencesTest extends Activity { SharedPreferences preferences; SharedPreferences.Editor editor; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 創建SharedPreferences實例,名字、可讀 preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE); editor = preferences.edit(); Button read = (Button) findViewById(R.id.read); Button write = (Button) findViewById(R.id.write); read.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //獲取time的字符串 String time = preferences.getString("time", null); //讀取int的隨機數 int randNum = preferences.getInt("random", 0); String result = time == null ? //?判斷 "您暫時還未寫入數據": "寫入時間:" + time + "\n上次隨機生成的隨機數為:" + randNum; //toast提示 Toast.makeText(SharedPreferencesTest.this , result , Toast.LENGTH_LONG).show(); } }); write.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 " + "hh:mm:ss"); // 存入當前時間 editor.putString("time", sdf.format(new Date())); // 存入隨機數 editor.putInt("random", (int) (Math.random() * 100)); // 提交數據 editor.commit(); } }); } }

2、res下面的布局文件:




3、AVD調試結果如下:

打開DDMS調試可以知道,sharedpreferences數據總是保存在/data/data//shared_prefs目錄下面以.xml形式保存。

2、File存儲

Java提供了一套完整的IO流體系,包括FileInPutSream、FileOutPutStream,通過這些IO流來訪問磁盤文件,android同樣支持以這種方式來訪問手機存儲器的文件。

Context提供了兩種方法來打開文件應用程序下的數據文件IO流:

》 public FileInputStream openFileInput (String name) :打開輸入流文件name

》 public FileOutputStream openFileOutput (String name, int mode) :打開輸出流文件name

這裡解釋一下輸入流和輸出流:輸入流指的是從硬盤等存儲器中讀數據到內存中,軟件在內存中運行;輸出流指的是從內存中讀數據到外部存儲器中。

mode參數主要有:

》MODE_PRIVATE :指定改數據只能被本程序讀寫

》MODE_APPEND :以追加方式打開,可向該文件夾中追加內容

》MODE_WORLD_READABLE:可以被其他程序讀,但不能寫

》MODE_WORLD_WRITEABLE:可被其他讀寫。

除此之外,Context還提供了如下方法來訪問應用程序的文件夾。 》getDir(String name, int mode) : 在應用程序的數據文件下獲取或創建name對於的子文件夾 》File getFileDir() :獲取應用程序的數據文件的絕對路徑 》String fileList() :返回文件文件夾list 》deleteFile(String name) :刪除name文件 下面根據例程來分析:兩個文本框,兩個按鈕,第一組用於寫入文件名字和存入;第二組用於讀取文件,並顯示。

1、activity下的.java

package wqt.list.filereadwrite;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintStream;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
	
	final String File_name="Read_Write";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button read=(Button)findViewById(R.id.read);
		Button write=(Button)findViewById(R.id.write);		
		final EditText edit1=(EditText) findViewById(R.id.edit1);
		final EditText edit2=(EditText) findViewById(R.id.edit2);

		write.setOnClickListener(new OnClickListener() 
		{
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//將wdit1中的內容寫入到文件中
				write(edit1.getText().toString());  //write函數在下面需要定義
				edit1.setText("");
			}
		});
		
		read.setOnClickListener(new OnClickListener() 
		{
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				edit2.setText(read());         //read函數需要在下面定義
			}
		});
		
	}
	
	private String read()
	{
		try
		{
			//打開文件輸入流
			FileInputStream fis =openFileInput(File_name );
			byte[] buff = new byte[1024];
			int hadRead =0;
			StringBuilder sb = new StringBuilder("");
			while( (hadRead = fis.read(buff)) > 0)
			{
				sb.append(new String(buff,0,hadRead));
			}
		    return sb.toString();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		return null;
	}
	
	private void write(String content)
	{
		try
		{
			//使用追加模式打開文件輸出流
			FileOutputStream fos = openFileOutput(File_name, MODE_APPEND);
			PrintStream ps=new PrintStream(fos);
			ps.println(content);
			ps.close();					
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}
2.res下的layout文件.xml


    

3、AVD調試:



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved