編輯:初級開發
首先android123以簡單的下載例子演示該類的大致結構,如下
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count)100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
最終我們執行 DownloadFilesTask().execute(url1, url2, url3); 即可。
在android浏覽器中下載Favicon圖標的實現如下:
class DownloadTouchIcon extends AsyncTask<String, Void, Bitmap> {
private final ContentResolver mContentResolver;
private final Cursor mCursor;
private final String mOriginalUrl;
private final String mUrl;
private final String mUserAgent;
/* package */ BrowserActivity Mactivity;
public DownloadTouchIcon(BrowserActivity activity, ContentResolver cr,
Cursor c, WebView vIEw) { //構造方法
Mactivity = activity;
mContentResolver = cr;
mCursor = c;
mOriginalUrl = vIEw.getOriginalUrl();
mUrl = vIEw.getUrl();
mUserAgent = vIEw.getSettings().getUserAgentString();
}
public DownloadTouchIcon(ContentResolver cr, Cursor c, String url) { //實現本類的構造
Mactivity = null;
mContentResolver = cr;
mCursor = c;
mOriginalUrl = null;
mUrl = url;
mUserAgent = null;
}
@Override
public Bitmap doInBackground(String... values) { //返回Bitmap類型
String url = values[0];
AndroidHttpClient clIEnt = androidHttpClIEnt.newInstance(mUserAgent);
HttpGet request = new HttpGet(url);
HttpClientParams.setRedirecting(clIEnt.getParams(), true); //處理302等重定向問題
try {
HttpResponse response = clIEnt.execute(request);
if (response.getStatusLine().getStatusCode() == 200) { //如果OK
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream content = entity.getContent(); //將圖標保存到InputStream中,因為是二進制內容
if (content != null) {
Bitmap icon = BitmapFactory.decodeStream( //從流中取出Bitmap,這裡使用了BitmapFactory類的靜態方法decodeStream
content, null, null);
return icon;
}
}
}
} catch (IllegalArgumentException ex) {
request.abort();
} catch (IOException ex) {
request.abort();
} finally {
clIEnt.close();
}
return null;
}
@Override
protected void onCancelled() {
if (mCursor != null) {
mCursor.close();
}
}
@Override
public void onPostExecute(Bitmap icon) {
if (Mactivity != null) {
Mactivity.mTouchIconLoader = null;
}
if (icon == null || mCursor == null || isCancelled()) {
return;
}
最終圖標要保存到浏覽器的內部數據庫中,系統程序均保存為SQLite格式,Browser也不例外,因為圖片是二進制的所以使用字節數組存儲數據庫的BLOB類型
final ByteArrayOutputStream os = new ByteArrayOutputStream();
icon.compress(Bitmap.CompressFormat.PNG, 100, os); //將Bitmap壓縮成PNG編碼,質量為100%存儲
ContentValues values = new ContentValues(); //構造SQLite的Content對象,這裡也可以使用raw sql代替
values.put(Browser.BookmarkColumns.TOUCH_ICON,os.toByteArray()); //寫入數據庫的Browser.BookmarkColumns.TOUCH_ICON字段
if (mCursor.moveToFirst()) {
do {
mContentResolver.update(ContentUris.withAppendedId(Browser.BOOKMARKS_URI, mCursor.getInt(0)),values, null, null);
} while (mCursor.moveToNext());
}
mCursor.close();
}
}
本次Android開發網通過兩個AsyncTask類演示了多種類型的任務構造,這裡大家注意返回類型,本節演示了Android平台上Content Provider、AsyncTask、Bitmap、HTTP以及Stream的相關操作,大家如何想很快提高開發水平其實只要理解Google如何去實現android系統常規構架就可以輕松入門谷歌移動平台。
android是一個針對觸摸屏專門設計的操作系統,當點擊編輯框,系統自動為用戶彈出軟鍵盤,以便用戶進行輸入。 那麼,彈出軟鍵盤後必然
File 讀寫[功能]因為文件讀寫很平常 使用打算把這個功能寫出輔助類的形式 以便以後方便使用 就是:FileIOHelper[代碼]1. 定義指定的File 以及其上
Android操作系統平台很容易跟Google其他應用如Google地圖的整合。在Android應用中,如果能在其中加入Google地圖,則會為你的應用增添強大的功能,
在android開發中ListView是比較常用的組件,它以列表的形式展示具體內容,並且能夠根據數據的長度自適應顯示。抽空把對ListVIEw的使用做了整理,並寫了個小