編輯:關於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 [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下面的布局文件:
打開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
一、背景最近做項目需要用到選擇圖片上傳,類似於微信、微博那樣的圖片選擇器,ContentResolver讀取本地圖片資源並用RecyclerView+Glide加載圖片顯
直接代碼 package com.example.demoemail; import android.net.Uri; import android.os.Bundl
繪完報表,餅圖,接下來就繪制柱形圖,柱形很容易,就是畫線和框就行了。我分別繪制一個豎向的,一個橫向的柱形圖。 效果圖如下: package com.xcl
先上預覽圖:流程1.一個勻速圓周運動的點 2.多個勻速圓周運動的點 3.多個圓周運動的點,速度由快到慢 4.點與點之間的間距線性減少,動畫的最後合為一個點 5.為了讓動畫