編輯:關於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
》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 kongyeeku@163.com * @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下面的布局文件:
打開DDMS調試可以知道,sharedpreferences數據總是保存在/data/data/
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
詳解Android_性能優化之ViewPager加載成百上千高清大圖oom解決方案
一、背景最近做項目需要用到選擇圖片上傳,類似於微信、微博那樣的圖片選擇器,ContentResolver讀取本地圖片資源並用RecyclerView+Glide加載圖片顯
android調用系統郵件組件(intent匹配的流程)
直接代碼 package com.example.demoemail; import android.net.Uri; import android.os.Bundl
Android Canvas練習(3)自已繪柱形圖
繪完報表,餅圖,接下來就繪制柱形圖,柱形很容易,就是畫線和框就行了。我分別繪制一個豎向的,一個橫向的柱形圖。 效果圖如下: package com.xcl
android自定義view 模仿win10進度條
先上預覽圖:流程1.一個勻速圓周運動的點 2.多個勻速圓周運動的點 3.多個圓周運動的點,速度由快到慢 4.點與點之間的間距線性減少,動畫的最後合為一個點 5.為了讓動畫