框架需要添加的權(quán)限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
XUtils框架的四大模塊
ViewUtils的模塊
(1)查找UI控件:@ViewInject(R.id.textView)
eg: ? ? ? ?@ViewInject(R.id.tv1Id) ? ? ? ?private TextView tv1;
(2)注冊UI控件的事件: @OnClick(R.id.test_button)
eg: ? ? ? ?@OnClick(R.id.btn1Id) ? ??public void aa(View v){}
說明:
1) ? 方法的訪問范圍一般為public ,但如果為private也會正常執(zhí)行稼虎,因為通過反射機制獲取的方法是所有方法麦牺。
2) ? 方法無返回類型
3) ? 方法的參數(shù)必須是View類型的污筷。
(3)注冊ListView控件的事件:@OnItemClick(R.id.listViewId)
(4)注冊CheckBox控件的事件:@OnCompoundButtonCheckedChange(R.id.enableDiscovereId)
(5)查找資源:@ResInject(id = R.string.label, type = ResType.String)
(6)解析UI注解:ViewUtils.inject(this)
(一)在Activity中注入
------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewUtils.inject(this); //注入view和事件
...
}
(二)在Fragment中注入
------------------
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bitmap_fragment, container, false); // 加載fragment布局
ViewUtils.inject(this, view); //注入view和事件
...
}
(三)在BaseAdapter中注入
------------------
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vHolder=null;
if(convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.item_jx, null);
vHolder=new ViewHolder();
ViewUtils.inject(vHolder, convertView);
...
}
...
}
(四)在PreferenceFragment中注入
------------------
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ViewUtils.inject(this, getPreferenceScreen()); //注入view和事件
...
}
ViewUtils.inject()的重載方法
// inject(View view);
// inject(Activity activity)
// inject(PreferenceActivity preferenceActivity)
// inject(Object handler, View view)
// inject(Object handler, Activity activity)
// inject(Object handler, PreferenceGroup preferenceGroup)
// inject(Object handler, PreferenceActivity preferenceActivity)
HttpUtils的模塊
支持同步和異步方式的網(wǎng)絡(luò)請求,支持大文件上傳嘲恍,上傳大文件不會oom,支持GET订雾、POST晶默、PUT、MOVE、COPY呕屎、DELETE让簿、HEAD、OPTIONS秀睛、TRACE尔当、CONNECT請求。
(1)一般使用步驟方法
使用場景: 獲取Json/xml的網(wǎng)絡(luò)接口數(shù)據(jù)
a琅催、實例化HttpUtils->new HttpUtils()
b居凶、調(diào)用實例的send(HttpMethod,String url,RequestCallback)方法,發(fā)送請求,并返回HttpHandler對象
第一個參數(shù):HttpMethod(GET,POST),第二個參數(shù): http的網(wǎng)絡(luò)請求接口藤抡,第三個參數(shù):請求回調(diào)ResponseCallback,需要指定返回數(shù)據(jù)的泛型,一般為String
c抹估、RequestCallback 回調(diào)接口的抽象類
必須實現(xiàn)
onSuccess(ResponseInfo responseInfo)請求成功的回調(diào)方法
onFailure(HttpException error, String msg)請求失敗的回調(diào)方法
不必須實現(xiàn)
onStart() 開始執(zhí)行之前的回調(diào)方法
onLoading(long total, long current, boolean isUploading) 正在執(zhí)行的回調(diào)方法
onCancelled() ?取消請求的回調(diào)方法
d缠黍、HttpHandler類
cancel(); 取消請求
cancel(true) 取消請求時,是否中斷線程
(2)文件下載的步驟方法
使用場景:下載非圖片的網(wǎng)絡(luò)位置的文件 ?, 特點:支持斷點續(xù)傳药蜻,隨時停止下載任務(wù)瓷式,開始任務(wù)
a、實例化HttpUtils->new HttpUtils()
b语泽、調(diào)用實例的download(String url,String target,boolean autoResume,boolean autoRename,RequestCallback)RequestCallback接口類同上
第一個參數(shù)url:網(wǎng)絡(luò)資源地址
第二個參數(shù)target: 本地存儲位置贸典,如/mnt/sdcard/aa.mp3
第三個參數(shù)autoResume:是否繼續(xù)下載(斷點續(xù)傳)
第四個參數(shù)autoRename:從請求返回信息中獲取文件名,下載完成后是否重命名
第五個參數(shù):異步請求的回調(diào)接口
c踱卵、HttpHandler類
通過HttpHandler.cancel()方法可以取消本次下載
(3)表單數(shù)據(jù)/文件上傳的步驟方法
使用場景:上傳基本數(shù)據(jù)或圖片等文件
a廊驼、實例化HttpUtils->new HttpUtils()
b、實例化RequestParamsRequestParams params=new RequestParams()
params.addHeader("name", "value") 增加請求頭參數(shù)
params.addQueryStringParameter("name", "value") 增加查詢字符參數(shù)
params.addBodyParameter("name", "value") 增加只包含字符串參數(shù)
//?只包含字符串參數(shù)時默認使用BodyParamsEntity惋砂,
//?類似于UrlEncodedFormEntity("application/x-www-form-urlencoded")妒挎。
params.addBodyParameter("file", new File("path")) 增加文件參數(shù)
// 加入文件參數(shù)后默認使用MultipartEntity("multipart/form-data"),
// 如需"multipart/related"西饵,xUtils中提供的MultipartEntity支持設(shè)置subType為"related"酝掩。
// 使用params.setBodyEntity(httpEntity)可設(shè)置更多類型的HttpEntity(如:
// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。
// 例如發(fā)送json參數(shù):params.setBodyEntity(new StringEntity(jsonStr,charset));
c眷柔、調(diào)用HttpUtils實例的send(HttpMethod,String url,RequestParams params,RequestCallback)方法開始上傳
第一個參數(shù):請求方法期虾,在此使用HttpMethod.POST
第二個參數(shù):上傳請求的網(wǎng)絡(luò)路徑
第三個參數(shù):上傳的數(shù)據(jù),包含基本信息和上傳文件信息
第四個參數(shù):請求的回調(diào)接口
BitmapUtils的模塊
加載bitmap的時候無需考慮bitmap加載過程中出現(xiàn)的oom和android容器快速滑動時候出現(xiàn)的圖片錯位等現(xiàn)象驯嘱,
支持加載網(wǎng)絡(luò)圖片和本地圖片镶苞,內(nèi)存管理使用lru算法,更好的管理bitmap內(nèi)存宙拉,
可配置線程加載線程數(shù)量宾尚,緩存大小,緩存路徑,加載顯示動畫等...
a煌贴、實例化BitmapUtils
BitmapUtils bUtils=new BitmapUtils(getApplicationContext(),"/mnt/sdcard/");
第一個參數(shù):Context 應(yīng)用上下文對象 ? ? ? ? 第二個參數(shù): 擴展緩存路徑
bUtils.configThreadPoolSize(5); //配置線程池大小
bUtils.configDiskCacheEnabled(true); //啟用擴展存儲緩存
加載網(wǎng)絡(luò)圖片:bUtils.display(imageView,?"http://www.baidu.com/logo.png")
加載本地圖片:bitmapUtils.display(imageView, "/sdcard/a.jpg")
加載assets中的圖片:加載本地圖片:bitmapUtils.display(imageView, "assets/a.jpg")
在使用ListView顯 示圖片時御板,可以通過PauseOnScrollListener控制滑動和快速滑動過程中時暫停加載圖片
//僅處理與圖片相關(guān)的事件,第二個參數(shù):滾動時是否暫停牛郑,第三個參數(shù):快速滑動時是否暫停
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true));
//同時處理ListView.OnScrollListener事件
listView.setOnScrollListener(new PauseOnScrollListener(bitmapUtils, false, true, customListener));
b怠肋、了解config打頭的方法
BitmapGlobalConfig配置
線程加載線程數(shù)量 ? ? bUtils.configThreadPoolSize(5); //配置線程池大小
配置緩存 ? ? 路徑:/data/data/{package}/cache/xx
bUtils.configMemoryCacheEnabled(true)
bUtils.configDefaultCacheExpiry(100*1024); //配置最大的內(nèi)存緩存100k
加載顯示動畫 ? ? ? bUtils.configDefaultImageLoadAnimation(Animation)
BitmapDisplayConfig配置
圖片寬高 ? ? ?bUtils.configDefaultBitmapMaxSize(int w,int h)
bUtils.configDefaultBitmapMaxSize(BitmapSize bs)
new BitmapSize(int w,int h) 指定寬和高
BitmapCommonUtils.getScreenSize(context) 依據(jù)屏幕尺寸
默認顯示圖片 ? ? ? bUtils.configDefaultLoadingImage(int resId)
bUtils.configDefaultLoadingImage(Bitmap b)
bUtils.configDefaultLoadingImage(Drawable d)
下載失敗圖片 ? ? ? ?bUtils.configDefaultLoadFailedImage(int resId)
bUtils.configDefaultLoadFailedImage(Bitmap b)
bUtils.configDefaultLoadFailedImage(Drawable d)
圖片保存質(zhì)量 ? ? ? ?bUtils.configDefaultBitmapConfig(Bitmap.Config.RGB_565);
圖片加載動畫 ? ? ? ?bUtils.configDefaultImageLoadAnimation(Animation)
eg:
//實例化圖片顯示的配置
BitmapDisplayConfig bdConfig=new BitmapDisplayConfig();
//設(shè)置顯示圖片特性
bdConfig.setBitmapConfig(Bitmap.Config.ARGB_4444);
bdConfig.setBitmapMaxSize(BitmapCommonUtils.getScreenSize(context)); //圖片的最大尺寸
bdConfig.setLoadingDrawable(context.getResources().getDrawable(R.drawable.ic_default)); //加載時顯示的圖片
bdConfig.setLoadFailedDrawable(context.getResources().getDrawable(R.drawable.ic_default)); //加載失敗時顯示的圖片
bdConfig.setAutoRotation(true); //自動旋轉(zhuǎn)
bdConfig.setShowOriginal(false); //不顯示源圖片
bdConfig.setAnimation(AnimationUtils.loadAnimation(context, R.anim.slide_in_from_top)); //顯示圖片執(zhí)行的動畫
bUtils.configDefaultDisplayConfig(bdConfig); //將顯示圖片的配置設(shè)置到圖片工具類中
DBUtils的模塊
模塊說明:android中的orm框架(Object Relation Mapping),一行代碼就可以進行增刪改查淹朋,支持事務(wù)笙各,默認關(guān)閉
可通過注解自定義表名、列名础芍、外鍵杈抢、唯一性約束、NOT NULL約束仑性、CHECK約束等(需要混淆的時候請注解表名
和列名)惶楼,支持綁定外鍵,保存實體時外鍵關(guān)聯(lián)實體自動保存或更新诊杆,自動加載外鍵關(guān)聯(lián)實體歼捐,支持延時加載,
支持鏈式表達查詢晨汹,更直觀的查詢語義豹储,參考下面的介紹或sample中的例子
a、實體類聲明及注解
注:必須提供無參的構(gòu)造方法注:必須提供無參的構(gòu)造方法
@Table(name="t_class") 作用于類淘这,修改的類與表建立ORM
@Id(column="_id") 作用于類中id成員屬性剥扣,代表:主鍵
@Column(column="name") 作用于類中成員,代表:屬性對應(yīng)的列名
@NotNull 作用于類中成員慨灭,代表:不為空約束
@Unique 作用于類中成員朦乏,代表:唯一約束
@Check(value="numbers>20") 作用于類中成員,代表:檢查約束氧骤,即numbers列值必須在于20
@Foreign(column="parentId",foreign="id") 作用于類中成員呻疹,代表:外鍵約束,column為屬性對應(yīng)的列
名,foreign為外表的主鍵
@Finder(valueColumn="id",targetColumn="cid") 作用于類成員筹陵,探測當(dāng)前表與其它表之間的關(guān)聯(lián)
b刽锤、DBUtils實例化->dUtils
create(Context context)
create(Context context, String dbName)
create(Context context, String dbDir, String dbName)
create(Context context, String dbName, int dbVersion, DbUpgradeListener)
create(Context context, String dbDir, String dbName, int dbVersion, DbUpgradeListener )
c、通過DaoConfig配置App全局數(shù)據(jù)庫信息
dUtils.getDaoConfig().setDbDir(String dir)
dUtils.getDaoConfig().setDbName(String dbName)
dUtils.getDaoConfig().setDbVersion(int dbVersion)
d朦佩、事務(wù)與調(diào)試
dUtils.configAllowTransaction(true)
dUtils.configDebug(true);
e并思、增、刪语稠、修改數(shù)據(jù)
save(Object entity) 保存單條記錄
saveAll(List entities) 批量保存
saveBindingId(Object entity) 關(guān)聯(lián)的對象自動保存 ? ? ? 目前測試結(jié)果: 不保存
saveBindingIdAll(List entities) 批量保存宋彼,同時保存關(guān)系對象 ? ? ? ?目前測試結(jié)果: 不保存
deleteById(Class entityType, Object idValue)
delete(Object entity)
delete(Class entityType, WhereBuilder whereBuilder)
deleteAll(List entities)
deleteAll(Class entityType)
update(Object entity, String... updateColumnNames)
update(Object entity, WhereBuilder whereBuilder, String... updateColumnNames)
updateAll(List entities, String... updateColumnNames)
updateAll(List entities, WhereBuilder whereBuilder, String... updateColumnNames)
f弄砍、查詢數(shù)據(jù)
T findById(Class entityType, Object idValue)
T findFirst(Selector selector)
List findAll(Selector selector)
List findAll(Class entityType)
DbModel findDbModelFirst(SqlInfo sqlInfo)
DbModel findDbModelFirst(DbModelSelector selector)鏈式查詢,DbModel是繼承HashMap類的
List list = dUtils.findDbModelAll(Selector.from(
Student.class).select("id", "name", "age")
List findDbModelAll(SqlInfo sqlInfo)
findDbModelAll(DbModelSelector selector)
g、統(tǒng)計
long count(Selector selector)
long count(Class entityType)