㈠ 有哪些比較好的androidSQLite開源工具類(android中的sqlite資料庫具有哪些特點)
是一個免費的開源的、簡易的、遵循Apache2開源協議發布的Android開發框架,其開發宗旨是簡單、快速的進行Android應用程序的開發,包含Androidmvc、簡易sqliteorm、ioc模塊、封裝Androidhttpclitent的http模塊,具有快速構建文件緩存功能,無需考慮緩存文件的格式,都可以非常輕松的實現緩存,它還基於文件緩存模塊實現了圖片緩存功能,在android中載入的圖片的時候,對oom的問題,和對載入圖片錯位的問題都輕易解決。他還包括了一個手機開發中經常應用的實用工具類,如日誌管理,配置文件管理,android下載器模塊,網路切換檢測等等工具。
目前主要有以下模塊:
MVC模塊:實現視圖與模型的分離。
ioc模塊:android中的ioc模塊,完全註解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
http模塊:通過httpclient進行封裝http數據請求,支持非同步及同步方式載入。
緩存模塊:通過簡單的配置及設計可以很好的實現緩存,對緩存可以隨意的配置
圖片緩存模塊:imageview載入圖片的時候無需考慮圖片載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
配迅擾頌置器模塊:可以對簡易的實現配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。
日誌列印模塊:可以較快的輕易的是實現日誌列印,支持日誌列印的擴展,目前支持對sdcard寫入本地列印、以及控制台列印
下載器模塊:可以簡單的實現多線程下載、後台下載、斷點續傳、對下載進李肆行控制、如開始、暫停、刪除等畝鄭等。
網路狀態檢測模塊:當網路狀態改變時,對網路狀態進行檢測。
㈡ android sqlite 已經插入到資料庫的數據查不到
樓主取數據的循環方式有點問題,試試下面的
for(cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext())
{
HashMap map=new HashMap();
map.put("num1", cursor.getString(1));
map.put("num2", cursor.getString(2));
map.put("num3", cursor.getString(3));
map.put("salesub", cursor.getString(4));
map.put("addr", cursor.getString(6));
map.put("phonenum", cursor.getString(7));
list.add(map);
}
㈢ 如何使用Mock來測試Files,Database和ContentProviders
Android是如何實現應用程序之間數據共享的?一個應用程序可以將自己的數據完全暴露出去,外界更本看不到,也不用看到這個應用程序暴露的數據是如何存儲的,或者是使用資料庫還是使用文件,還是通過網上獲得,這些一切都不重要,重要的是外界可以通過這一套標准及統一的介面和這個程序里的數據打交道,例如:添加(insert)、刪除(delete)、查詢(query)、修改(update),當然需要一定的許可權才可以。如何將應用程序的數據暴露出去?Android提供了ContentProvider,一個程序可以通過實現一個Contentprovider的抽象介面將自己的數據完全暴露出去,而且Contentproviders是以類似資料庫中表的方式將數據暴露。Contentproviders存儲和檢索數據,通過它可以讓所有的應用程序訪問到,這也是應用程序之間唯一共享數據的方法。要想使應用程序的數據公開化,可通過2種方法:創建一個屬於你自己的Contentprovider或者將你的數據添加到一個已經存在的Contentprovider中,前提是有相同數據類型並且有寫入Contentprovider的許可權。如何通過一套標准及統一的介面獲取其他應用程序暴露的數據?Android提供了ContentResolver,外界的程序可以通過ContentResolver介面訪問ContentProvider提供的數據。當前篇主要說明,如何獲取其它應用程序共享的數據,比如獲取Android手機電話薄中的信息。什麼是URI?在學習如何獲取ContentResolver前,有個名詞是必須了解的:URI。URI是網路資源的定義,在Android中賦予其更廣闊的含義,先看個例子,如下:將其分為A,B,C,D4個部分:A:標准前綴,用來說明一個ContentProvider控制這些數據,無法改變的;B:URI的標識,它定義了是哪個ContentProvider提供這些數據。對於第三方應用程序,為了保證URI標識的唯一性,它必須是一個完整的、小寫的類名。這個標識在元素的authorities屬性中說明:C:路徑,ContentProvider使用這些路徑來確定當前需要生什麼類型的數據,URI中可能不包括路徑,也可能包括多個;D:如果URI中包含,表示需要獲取的記錄的ID;如果沒有ID,就表示返回全部;由於URI通常比較長,而且有時候容易出錯,切難以理解。所以,在Android當中定義了一些輔助類,並且定義了一些常量來代替這些長字元串,例如:People.CONTENT_URIContentResolver介紹說明看完這些介紹,大家一定就明白了,ContentResolver是通過URI來查詢ContentProvider中提供的數據。除了URI以外,還必須知道需要獲取的數據段的名稱,以及此數據段的數據類型。如果你需要獲取一個特定的記錄,你就必須知道當前記錄的ID,也就是URI中D部分。前面也提到了Contentproviders是以類似資料庫中表的方式將數據暴露出去,那麼ContentResolver也將採用類似資料庫的操作來從Contentproviders中獲取數據。現在簡要介紹ContentResolver的主要介面,如下:返回值函數聲明finalUriinsert(Uriurl,ContentValuesvalues).finalintdelete(Uriurl,Stringwhere,String[]selectionArgs)Deletesrow(s)specifiedbyacontentURI.finalCursorquery(Uriuri,String[]projection,Stringselection,String[]selectionArgs,StringsortOrder)QuerythegivenURI,.finalintupdate(Uriuri,ContentValuesvalues,Stringwhere,String[]selectionArgs)Updaterow(s)inacontentURI.看到這里,是否感覺與資料庫的操作基本一樣的?就是這樣的,詳細解析請參考AndroidSQLite解析篇中的說明,不在此詳細說明。最後一個問題:如何獲取ContentResolver?調用getContentResolver(),例如:ContentResolvercr=getContentResolver();製作ContentResolver實例以上就完全介紹了如何獲取、使用ContentResolver,啟動Eclipes,製作一個完整的實例如下:打開showcontent.java,修改如下:packagemoandroid.showcontact;importandroid.app.ListActivity;importandroid.database.Cursor;importandroid.os.Bundle;importandroid.provider.Contacts.Phones;importandroid.widget.ListAdapter;importandroid.widget.SimpleCursorAdapter;{protectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//ContentResolver通過URI來查詢ContentProvider中提供的數據Cursorc=getContentResolver().query(Phones.CONTENT_URI,null,null,null,null);startManagingCursor(c);ListAdapteradapter=newSimpleCursorAdapter(this,android.R.layout.simple_list_item_2,c,newString[]{Phones.NAME,Phones.NUMBER},newint[]{android.R.id.text1,android.R.id.text2});setListAdapter(adapter);}}然後在AndroidManifest.XML中元素前增加如下許可:最後運行程序,在模擬器啟動後,單擊Menu返回到Home界面,打開Contacts選擇Contacts標簽頁,添加2個聯系人信息。返回到Home,選擇moandroid.showcontact運行,剛添加的2個聯系人信息將顯示在界面上
㈣ 如何解決androidsQLiteDatabase中的表不存在
1
問題分析:為什麼,有這個提示。表沒有創建成功,是因為資料庫在執行的時候,沒有執行創建表的命令。
2
查看創建表的命令的地方。這里,我們使用的是一個繼承類:DatabaseHelper。新建的命令是在我們之前創建好的表的下面。
3
執行程序,發現出現問題。之前創建的兩個表是可以執行的,但是,新建的表不存在。
4
解決問題:在需要調用的地方,加上下面這段代碼。這樣就是在原有的基礎上,進行了一次更新操作。把版本升級了一下。並且,只是在oncreate中,執行了一次。
5
我們來看一下更新的代碼。這里需要把之前創建的數據表給刪除掉,然後,重新執行一下創建,就可以了,否則,會出現數據表已經創建的問題。
6
出現的原因:這個應該是SQLiteDatabase在創建的時候,只是執行了一次,之後,就不在執行onCreate這個函數了。(可以catlog看一下)。
㈤ 如何寫 Android init.rc-ljbphoebe-ChinaUnix博客
Commands:命令
Actions: 動作
Triggers: 觸發條件
Services: 服務
Options: 選項
Propertise: 屬性
(1) Commands是一些基本的操作,例如:
mkdir /sdcard 0000 system system mkdir /system
mkdir /data 0771 system system
mkdir /cache 0770 system cache
mkdir /config 0500 root root
mkdir /sqlite_stmt_journals 01777 root root
mount tmpfs tmpfs /sqlite_stmt_journals size=4m
這些命令在init可執行程序中被解析,然後調用相關的函數來實現。
(2) Actions(動作)表示一系列的命令,通常在Triggers(觸發條件)中調用,動作和觸發條件的形式為:
on動作的使用示例如下:
on init
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
mkdir /system
init表示一個觸發條件,這個觸發事件發生後,進行設置環境變數和建立目錄的操作稱為一個「動作」
(3) Services(服務)通常表示啟動一個可執行程序,Options(選項)是服務的附加內容,用於配合服務使用。
service vold /system/bin/vold
socket vold stream 0660 root mount
service bootsound /system/bin/playmp3
user media
group audio
oneshot
vold和bootsound分別是兩個服務的名稱,/system/bin/vold和/system /bin/playmp3分別是他們所對應的可執行程序。
socket、user、group、oneshot就是配合服務使用的選項。其中oneshot選項表示該服務只啟動一次,而如果沒有oneshot選項,
這個可執行程序會一直存在--如果可執行程序被殺死,則會重新啟動。
(4) Properties(屬性)是系統中使用的一些值,可以進行設置和讀取。
setprop ro.FOREGROUND_APP_MEM 1536
setprop ro.VISIBLE_APP_MEM 2048
on property:ro.kernel.qemu=1
start adbd
setprop 用於設置屬性,on property可以用於判斷屬性,這里的屬性在整個Android系統運行中都是一致的。
init腳本的關鍵字可以參考init進程的system/core/init/keyword.h文件。
init.rc的使用方法,可以參考說明文件system/core/init/readme.txt
如果想要修改啟動過程只需要修改init.c(system/core/init)或者init.rc里的內容即可.
如何去寫
Android init.rc (Android init language)
Android 初始化語言由四大類聲明組成 : 行為類 (Actions), 命令類 (Commands) ,服務類 (Services), 選項類 (Options).
* 初始化語言以行為單位,由以空格間隔的語言符號組成。 C 風格的反斜杠轉義符可以用來插入空白到語言符號。雙引號也可以用來防止文本被空格分成多個語言符號。當反斜杠在行末時,作為折行符。
* 以 # 開始 ( 前面允許有空格 ) 的行為注釋行。
* Actions 和 Services 隱含聲明一個新的段落。所有該段落下 Commands 或 Options 的聲明屬於該段落。第一段落前的 Commands 或Options 被忽略。
* Actions 和 Services 擁有獨一無二的命名。在它們之後聲明相同命名的類將被當作錯誤並忽略。
Actions
-------
Actions 是一系列命令的命名。 Actions 擁有一個觸發器 (trigger) 用來決定 action 何時執行。當一個 action 在符合觸發條件被執行時,如果它還沒被加入到待執行隊列中的話,則加入到隊列最後。
隊列中的 action 依次執行, action 中的命令也依次執行。 Init 在執行命令的中間處理其它活動 ( 設備創建 / 銷毀 ,property 設置,進程重啟) 。
Actions 表現形式為:
on
Services
--------
Services 是由 init 啟動,在它們退出時重啟 ( 可選 ) 。 Service 表現形式為 :
service [ ]*
...
Options
-------
Options 是 Services 的修飾,它們影響 init 何時、如何運行 service.
critical
這是一個設備關鍵服務 (device-critical service) . 如果它在 4 分鍾內退出超過 4 次,設備將重啟並進入恢復模式。
disabled
這個服務的級別將不會自動啟動,它必須被依照服務名指定啟動才可以啟動。
setenv
設置已啟動的進程的環境變數 的值
socket [ [ ] ]
創建一個名為 /dev/socket/ 的 unix domin socket ,並傳送它的 fd 到已啟動的進程。 必須為 "dgram" 或 "stream". 用戶和組默認為 0.
user
在執行服務前改變用戶名。當前默認為 root. 如果你的進程需要 linux 能力,你不能使用這個命令。你必須在還是 root 時請求能力,並下降到你需要的 uid.
group [ ]*
在執行服務前改變組。在第一個組後的組將設為進程附加組 ( 通過 setgroups()). 當前默認為 root.
oneshot
在服務退出後不重啟。
class
為 service 指定一個類別名。同樣類名的所有的服務可以一起啟動或停止。如果沒有指定類別的服務默認為 "default" 類。
onrestart
當服務重啟時執行一個命令。
Triggers
--------
Triggers( 觸發器 ) 是一個字元串,可以用來匹配某種類型的事件並執行一個 action 。
boot
這是當 init 開始後執行的第一個觸發器 ( 當 /init.conf 被載入 )
=
當 property 被設為指定的值 時觸發。
device-added-
device-removed-
當設備節點被添加或移除時觸發。
service-exited-
當指定的服務存在時觸發
Commands
--------
exec [ ]*
Fork 並執行一個程序 (). 這將被 block 直到程序執行完畢。最好避免執行例如內建命令以外的程序,它可能會導致 init 被阻塞不動。
export
設定全局環境變數 的值 ,當這個命令執行後所有的進程都可以取得。
ifup
使網路介面 聯機。
import
解析一個 init 配置文件,擴展當前配置文件。
hostname
設置主機名
chmod
改變文件訪問許可權
chown
改變文件所屬和組
class_start
當指定類別的服務沒有運行,啟動該類別所有的服務。
class_stop
當指定類別的服務正在運行,停止該類別所有的服務。
domainname
設置域名。
insmod
載入該路徑 的模塊
mkdir [mode] [owner] [group]
在 創建一個目錄 , 可選選項 :mod,owner,group. 如果沒有指定,目錄以 755 許可權, owner 為 root,group 為 root 創建 .
mount
[ ]*
嘗試 mount 到目錄
. 可以用 mtd@name 格式以命名指定一個 mtd 塊設備。 包含"ro","rw","remount","noatime".
例如:
mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/mmcblk1p1 /SD1
chown system system /SD1
chmod 0777 /SD1
mount -t vfat -o fmask=0000,dmask=0000,rw,flush,noatime,nodiratime /dev/block/mmcblk1p6 /SD3
chown system system /SD3
chmod 0777 /SD3
setkey
暫時沒有
setprop
設置系統 property 的值 .
setrlimit
設置 resource 的 rlimit.
start
啟動一個沒有運行的服務。
stop
停止一個正在運行的服務。
symlink
創建一個 的符號鏈接到
sysclktz
設置系統時區 (GMT 為 0)
trigger
觸發一個事件。用於調用其它 action 。
write [ ]*
打開 的文件並寫入一個或多個字元串。
Properties
----------
Init 會更新一些系統 property 以提供查看它正在幹嘛。
init.action
當前正在執行的 action, 如果沒有則為 ""
init.command
被執行的命令,如果沒有則為 ""
init.svc.
命名為 的服務的狀態 ("stopped", "running", "restarting")
init.rc 示例 :
-----------------
# not complete -- just providing some examples of usage
#
on boot
export PATH /sbin:/system/sbin:/system/bin
export LD_LIBRARY_PATH /system/lib
mkdir /dev
mkdir /proc
mkdir /sys
mount tmpfs tmpfs /dev
mkdir /dev/pts
mkdir /dev/socket
mount devpts devpts /dev/pts
mount proc proc /proc
mount sysfs sysfs /sys
write /proc/cpu/alignment 4
ifup lo
hostname localhost
domainname localhost
mount yaffs2 mtd@system /system
mount yaffs2 mtd@userdata /data
import /system/etc/init.conf
class_start default
service adbd /sbin/adbd
user adb
group adb
service usbd /system/bin/usbd -r
user usbd
group usbd
socket usbd 666
service zygote /system/bin/app_process -Xzygote /system/bin --zygote
socket zygote 666
service runtime /system/bin/runtime
user system
group system
on device-added-/dev/compass
start akmd
on device-removed-/dev/compass
stop akmd
service akmd /sbin/akmd
disabled
user akmd
group akmd
調試
---------------
默認情況下, init 執行的程序輸出的信息和錯誤到 /dev/null. 為了 debug ,你可以通過 Android 程序 logwrapper 執行你的程序。這將復位向輸出 / 錯誤輸出到 Android logging 系統 ( 通過 logcat 訪問 ) 。
===============================================================
Android——init.rc腳本
在Android中使用啟動腳本init.rc,可以在系統的初始化中進行簡單的操作。
init.rc啟動腳本路徑:system/core/rootdir/init.rc
內容:
Commands:命令
Actions:動作
Triggers:觸發條件
Services:服務
Options:選項
Properties:屬性
Commands是一些基本操作。如:
mkdir /system
mkdir /data 0771 system system
mkdir /persist 0771 system system
devwait /dev/block/mmcblk0p12
mount ext3 /dev/block/mmcblk0p
Action表示一系列命令,通常在Triggers中調用,如:
on init //表示一個觸發條件
sysclktz 0
loglevel 3
# setup the global environment
export PATH /sbin:/system/sbin:/system/bin:/system/xbin
export LD_LIBRARY_PATH /system/lib
export ANDROID_BOOTLOGO 1
Services通常表示啟動一個可執行程序,Options是服務的附加內容,用於配合服務使用。
service vold /system/bin/vold //vold是服務名稱,/system/bin/vold是所對應的可執行程序。
socket vold stream 0660 root mount //socket是配合服務使用的選項
ioprio be 2
service netd /system/bin/netd
socket netd stream 0660 root system
配合服務使用的選項有socket,user,group,oneshot。
oneshot表示該服務只啟動一次,而如果沒有oneshot選項,這個可執行程序將一直存在——如果可執行程序被殺死,則會重新啟動。
Properties是系統中使用的一些值,可以進行設置和讀寫。
setprop ro.HIDDEN_APP_MEM 5120 //setprop用於設置屬性
setprop ro.CONTENT_PROVIDER_MEM 5632
setprop ro.EMPTY_APP_MEM 6144
...
on property:ro.kernel.qemu=1 //on property用於判斷屬性
start adbd
這里的屬性在整個android系統運行中都是一致的。
init腳本的關鍵字可以參考init進程中的system/core/init/keyword.h文件。如:
KEYWORD(chroot, COMMAND, 1, do_chroot) //chroot是命令,do_chroot()是調用的函數,這個函數在init進程中的system/core/init/builtins.c文件中定義。
例如:
service akmd /system/bin/logwrapper /sbin/akmd