編輯:關於Android編程
當我們軟件中要使用大量數據,我們會選擇將這些數據存儲到一個數據庫中,然後通過數據庫的查詢修改操作來管理這些數據。大多數情況下我們都只在程序中建立使用數據庫,但也有我們在程序中只是使用的數據庫,並不在程序中建立它們,因為這種數據庫往往數據量比較大,我們在建立時如果不采用多線程和後台服務的話,很容易導致前台界面的阻塞停滯,這樣往往會影響用戶體驗,造成不好的使用效果。這時我們可不可以直接建好數據庫並錄入數據,然後通過程序將數據庫正確導入進我們的軟件文件夾裡面。這樣減少了讀取數據和建立數據庫的時間,可以在很大程度上提高軟件響應的速度。
還是結合之前做的一個軟件的天氣預報功能開發的實例來講解如何導入外部數據庫。首先我們通過DDMS看一下數據庫的存放路徑,一般情況下數據庫的存放路徑為:/data/packagname/databases/( packagname指的是我們所建立的工程的包名,例如這裡我的包名就是com.liuproject.reminder。有的數據庫就直接在packagname下面,有的則是在databases目錄下,大家可以打開DDMS看一下。)如圖databases文件夾下面有兩個數據庫:
其中City(上圖為導入成功後的截圖)就是我們即將要從外部導入的數據庫。我們將建好的City數據庫文件拷貝到我們所建工程的assets文件夾中,如下圖所示:

要注意我們所提供的外部數據要和我們設計的將在軟件中使用的數據庫保持一致,及時每一條記錄的屬性值名稱和數據類型一致。數據准備完成後我們就可以開始導入外部數據庫了。具體實現源碼如下:
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
public class ImportDB{
private final int BUFFER_SIZE = 10000;
public static final String DB_NAME = "City"; //保存的數據庫文件名
public static final String PACKAGE_NAME = "com.liuproject.reminder";//工程包名
public static final String DB_PATH = "/data"
+ Environment.getDataDirectory().getAbsolutePath() + "/"
+ PACKAGE_NAME+"/databases"; //在手機裡存放數據庫的位置
private Context context;
ImportDB(Context context) {
this.context = context;
}
public void copyDatabase() {
String dbfile=DB_PATH + "/" + DB_NAME ;
try {
//執行數據庫導入
InputStream is = this.context.getResources().getAssets().open("City"); //欲導入的數據庫
FileOutputStream fos = new FileOutputStream(dbfile);
byte[] buffer = new byte[BUFFER_SIZE];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();//關閉輸出流
is.close();//關閉輸入流
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
通過上面的這個class我們就可以將存放在assets文件夾中的外部數據庫導入到我們所需要的文件目錄下。接著開始建立我們在程序中所要使用的數據庫類,如下代碼:
class CityDB extends SQLiteOpenHelper{//城市Id數據庫操作
private final String DB_NAME="CityID";//數據庫名稱
public CityDB(Context context,String name,CursorFactory factory,int version) {
super(context, name,factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
String createDB= "create table "+DB_NAME+"(cityid varchar(14) primary key , cityname varchar(20),type int)";//數據庫中記錄的屬性名稱及屬性值類型
db.execSQL(createDB);//創建數據庫
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
String dropTableSQL = "DROP TABLE IF EXISTS " + DB_NAME + " ";
db.execSQL(dropTableSQL);
dropTableSQL = "DROP TABLE IF EXISTS " + DB_NAME + " ";
db.execSQL(dropTableSQL);
onCreate(db);
}
public void execSQL(String sql, Object[] args) {//執行操作
SQLiteDatabase db = this.getWritableDatabase();
db.execSQL(sql, args);
}
public Cursor query(String sql, String[] args) {//返回操作結果指針
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(sql, args);
return cursor;
}
}
在之後的程序中我們就可以通過new CityDB(this, NAME, null,
Android AlertDialog實現分享對話框/退出對話框/下載對話框
一.摘要彈窗通常用於提示用戶進行某種操作,比如:點擊分享按鈕,彈窗分享對話框;雙擊返回按鈕,彈窗退出對話框;下載文件,提示下載對話框等等,分享對話框/退出對話框/下載對話
Android基於ImageSwitcher實現圖片切換功能
左右切換圖片控件大家都用ViewPager, ViewFipper比較多吧,我之前也用ViewPager實現了,使用ViewPager實現左右循環滑動圖片,有興趣的可以去
Java4Android開發教程(二)hello world!
安裝完jdk環境後,編寫第一個java程序hello.java:復制代碼 代碼如下:public class hello{ publi
基於Android的英文詞典的實現方法
英文詞典是手機中經常使用的應用。因此,在本文將結合Android來討論如何實現一個Android版的英文詞典。實現英文詞典的方法很多。在本文使用了SQLite數據庫來保存