引言:
在我們每天使用的手機設備中,無時無刻都在進行着數據的存和取。安卓作爲一種手機操作系統,提供瞭如下方式的數據存取方式: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和網絡讀寫數據下面的博文中會陸續奉上,還望大家多多支持!