Android中提供4種數(shù)據(jù)存儲(chǔ)的方法:(1)SharedPreferences,用鍵值對(duì)的方式來(lái)存儲(chǔ)數(shù)據(jù),是一種輕量級(jí)的存儲(chǔ)機(jī)制,可以存儲(chǔ)一些屬性等。(2)Files:文件輸入輸出流的方式存儲(chǔ)數(shù)據(jù),F(xiàn)ileInputStream和FileOutputStream。在Android中,文件是一個(gè)應(yīng)用程序私有的,一個(gè)應(yīng)用程序無(wú)法讀寫其他應(yīng)用程序的文件。寫入SD卡除外。(3)SQLite(4)網(wǎng)絡(luò)(這個(gè)不算吧~~~--!)。
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括陵川網(wǎng)站建設(shè)、陵川網(wǎng)站制作、陵川網(wǎng)頁(yè)制作以及陵川網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,陵川網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到陵川省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
SQLite:
(1)創(chuàng)建和打開(kāi)數(shù)據(jù)庫(kù)可以使用方法openOrCreateDatabase,它會(huì)自動(dòng)去檢測(cè)是否存在數(shù)據(jù)庫(kù),如果存在則打開(kāi),如果不存在則創(chuàng)建一個(gè)數(shù)據(jù)庫(kù);成功返回一個(gè)SQliteDatabase對(duì)象。(2)創(chuàng)建一張表通過(guò)SQL語(yǔ)句實(shí)現(xiàn),調(diào)用sqliteDatabase對(duì)象的execSQL方法,執(zhí)行創(chuàng)建表的SQL語(yǔ)句。
(3)向數(shù)據(jù)表中添加一條記錄可以直接通過(guò)SQL語(yǔ)句實(shí)現(xiàn),也可以使用ContentValue對(duì)象,ContentValue對(duì)象是一個(gè)Map,Key是字段名,Value是值。Cv.put(key,value);然后調(diào)用sqliteDatabase對(duì)象的
insert(tableName,null,cv)方法插入數(shù)據(jù)。
(4)刪除數(shù)據(jù)可以直接執(zhí)行SQL,也可以執(zhí)行sqliteDatabase的delete方法。
(5)同理修改數(shù)據(jù)也是執(zhí)行SQL或調(diào)用update方法,需要傳入ContenValue的對(duì)象表示修改的內(nèi)容。
(6)關(guān)閉數(shù)據(jù)庫(kù)sqliteDatabase.close();
(7)刪除指定表調(diào)用SQL語(yǔ)句即可。
(8)查詢:在Android中查詢數(shù)據(jù)是通過(guò)Cursor類來(lái)實(shí)現(xiàn)的,當(dāng)我們使用SQLiteDatabase.query()方法時(shí),會(huì)得到一個(gè)Cursor對(duì)象,Cursor對(duì)象指向的是每條數(shù)據(jù)。例如cur.moveToFirst();cur.moveToNext();等。在實(shí)際開(kāi)發(fā)中,為了能夠更好地管理和維護(hù)數(shù)據(jù)庫(kù),我們會(huì)封裝一個(gè)繼承自SQLiteOpenHelper類的數(shù)據(jù)庫(kù)操作類。SQLiteOpenHelper的構(gòu)造方法中分別需要傳入Context、數(shù)據(jù)庫(kù)名稱、CursorFactory(一般默認(rèn)null)、數(shù)據(jù)庫(kù)版本號(hào)。在SQLiteOpenHelper中首先執(zhí)行的是onCreate方法(當(dāng)數(shù)據(jù)庫(kù)第一次被創(chuàng)建時(shí))。在構(gòu)造函數(shù)中并沒(méi)有真正創(chuàng)建數(shù)據(jù)庫(kù),而是調(diào)用getWriteableDatabase或者getReadableDatabase方法時(shí)才真正去創(chuàng)建數(shù)據(jù)庫(kù),并且返回一個(gè)SQLiteDatabase對(duì)象。
通常來(lái)說(shuō),一個(gè)android應(yīng)用程序不止一個(gè)Activity(活動(dòng)),更不止一個(gè)界面。于是需要?jiǎng)?chuàng)建多個(gè)Activity來(lái)滿足應(yīng)用程序的要求,這里我將告訴大家如何添加新的Activity,并實(shí)現(xiàn)Activity之間的切換,這里的兩個(gè)活動(dòng)以不同界面展示,活動(dòng)的切換相當(dāng)于界面的切換。
Android studio
Android手機(jī)或者安卓模擬器
首先創(chuàng)建一個(gè)Test項(xiàng)目工程,選擇默認(rèn)版式,選擇好自己喜歡的主題(Theme)。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
在文件管理器中找到layout下的xml文件,并將其復(fù)制粘貼一份到layout目錄下,命名為second_activity.xml。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
接下來(lái)在.java文件處新建一個(gè)java class,命名為SecondActivity。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
Android studio教程:[6]創(chuàng)建多個(gè)Activity
此時(shí)可以看到文件目錄中多出來(lái)一個(gè)xml文件和一個(gè)java類文件。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
打開(kāi)AndroidManifest.xml文件,添加一個(gè)activity/activity標(biāo)簽,添加內(nèi)容如下:
activity
android:name=".SecondActivity"
android:label="Second Activity"
intent-filter
action android:name="com.litreily.SecondActivity"/
category android:name="android.intent.category.DEFAULT"/
/intent-filter
/activity
Android studio教程:[6]創(chuàng)建多個(gè)Activity
修改SecondActivity.xml:
TextView
android:text="The Second Activity!"
android:layout_width="wrap_content"
android:layout_height="wrap_content" /
Android studio教程:[6]創(chuàng)建多個(gè)Activity
修改SecondActivity.java文件:
public class SecondActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.SecondActivity);
}
}
Android studio教程:[6]創(chuàng)建多個(gè)Activity
修改主界面的activity_my.xml文件,添加一個(gè)按鈕,用于跳轉(zhuǎn)Activity:
Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="轉(zhuǎn)到下一個(gè)界面"
android:onClick="onClick"/
Android studio教程:[6]創(chuàng)建多個(gè)Activity
在主界面的java類中實(shí)現(xiàn)按鈕的點(diǎn)擊事件響應(yīng)函數(shù)onClick,通過(guò)startActivity函數(shù)打開(kāi)新的Activity.
public void onClick(View view)
{
startActivity(new Intent("com.litreily.SecondActivity"));
}
Android studio教程:[6]創(chuàng)建多個(gè)Activity
設(shè)置采用模擬器打開(kāi)App,并啟動(dòng)調(diào)試打開(kāi)模擬器。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
在模擬器中運(yùn)行程序,點(diǎn)擊按鈕可以切換Activity,在第二個(gè)界面點(diǎn)擊返回鍵可以返回主界面。
Android studio教程:[6]創(chuàng)建多個(gè)Activity
Android studio教程:[6]創(chuàng)建多個(gè)Activity
注意事項(xiàng)
xml文件的命名為小寫字母或者數(shù)字,大寫字母可能會(huì)報(bào)錯(cuò)
在SD卡上創(chuàng)建數(shù)據(jù)庫(kù)
通過(guò)android的SQLiteOpenHelper類的源碼,可以看到SQLiteOpenHelper類的getWritableDatabase
這個(gè)接口實(shí)際上調(diào)用的是Context的openOrCreateDatabase方法,而這個(gè)方法是不支持帶路徑的數(shù)據(jù)庫(kù)名
稱的,也就是說(shuō),用這個(gè)方法創(chuàng)建的數(shù)據(jù)庫(kù)只能放在/data/data/包名稱/ 目錄下;要想在SD卡上創(chuàng)建數(shù)據(jù)庫(kù)
,我們可以調(diào)用SQLiteDatabase類的openOrCreateDatabase方法,這個(gè)方法是支持帶路徑的數(shù)據(jù)庫(kù)名稱的。
那么下面的問(wèn)題就是如何判斷是否存在SD卡,已經(jīng)如何獲取SD卡的路徑了?
判斷是否存在SD卡:
android.os.Environment.MEDIA_MOUNTED.equals(
android.os.Environment.getExternalStorageState());
獲取SD卡路徑:String dbPath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath();
在SD卡上創(chuàng)建數(shù)據(jù)庫(kù)方法如下:
String dbPath=android.os.Environment.getExternalStorageDirectory()
.getAbsolutePath()+"/database";
File dbp=new File(dbPath);
File dbf=new File(dbPath+"/"+"test.db");
if(!dbp.exists()){
dbp.mkdir();
}
//數(shù)據(jù)庫(kù)文件是否創(chuàng)建成功
boolean isFileCreateSuccess=false;
if(!dbf.exists()){
try{
isFileCreateSuccess=dbf.createNewFile();
}
catch(IOException ioex){
}
}
else{
isFileCreateSuccess=true;
}
if(isFileCreateSuccess)
db = SQLiteDatabase.openOrCreateDatabase(dbf, mFactory);
為了簡(jiǎn)便起見(jiàn),我們可以用上述方法重寫SQLiteOpenHelper類的getWritableDatabase方法,
其他邏輯參照SQLiteOpenHelper類即可。最后別忘了,加入SD卡的讀寫權(quán)限:
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/。