編輯:關於Android編程
MainActivity如下:
package cn.cc;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import cn.cc.AsyncTaskSubClass.AsyncTaskCallbackInterface;
import cn.cc.AsyncTaskSubClass.AsyncTaskPerformInterface;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ImageView;
/**
* Demo描述:
* 平常我們寫一個AsyncTask的時候把異步操作已經異步完成後的操作
* 是放在doInBackground()和onPostExecute()方法中的.
* 這樣顯得代碼比較臃腫,而且不方便復用.
* 所以在此采用AsyncTask與回調結合的方式:抽象AsyncTask的代碼從而
* 簡化代碼,並且利於重用.
*/
public class MainActivity extends Activity {
private Context mContext;
private ImageView mImageView;
private AsyncTaskSubClass mAsyncTaskSubClass;
private String mFavIconPathString =null;
private final String FAVICON_SERVICE="http://www.google.com/s2/favicons?domain=";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
mContext=this;
mImageView=(ImageView) findViewById(R.id.imageView);
mFavIconPathString = FAVICON_SERVICE+"http://www.ifeng.com/";
startAsyncTask();
}
private void startAsyncTask() {
mAsyncTaskSubClass = new AsyncTaskSubClass(mContext,
new AsyncTaskPerformInterface() {
@Override
public Bitmap performAsyncTask(String string) {
try {
Bitmap bitmap=null;
InputStream inputStream = null;
URL imageUrl = new URL(string);
HttpURLConnection httpURLConnection = (HttpURLConnection) imageUrl.openConnection();
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("GET");
if (httpURLConnection.getResponseCode() == 200) {
inputStream = httpURLConnection.getInputStream();
bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
}
} catch (Exception e) {
}
return null;
}
},
new AsyncTaskCallbackInterface() {
@Override
public void asyncTaskFinishCallback(Bitmap bitmap) {
mImageView.setImageBitmap(bitmap);
}
});
//開始執行一個異步任務
mAsyncTaskSubClass.execute(mFavIconPathString);
}
}
AsyncTaskSubClass如下:
package cn.cc; import android.content.Context; import android.graphics.Bitmap; import android.os.AsyncTask; //構造函數AsyncTask參數說明: //Params 啟動任務執行的輸入參數 //Progress 後台任務執行的進度 //Result 後台計算結果的類型 public class AsyncTaskSubClass extends AsyncTask { private Context mContext; private AsyncTaskPerformInterface mAsyncTaskPerformInterface; private AsyncTaskCallbackInterface mAsyncTaskCallbackInterface; public AsyncTaskSubClass( Context context, AsyncTaskPerformInterface asyncTaskPerformInterface, AsyncTaskCallbackInterface asyncTaskCallbackInterface) { super(); this.mContext = context; this.mAsyncTaskPerformInterface = asyncTaskPerformInterface; this.mAsyncTaskCallbackInterface = asyncTaskCallbackInterface; } //執行異步操作的回調接口 public interface AsyncTaskPerformInterface { public Bitmap performAsyncTask(String string); } //異步操作完成的回調接口 public interface AsyncTaskCallbackInterface { public void asyncTaskFinishCallback(Bitmap bitmap); } @Override protected void onPreExecute() { super.onPreExecute(); System.out.println("調用onPreExecute()方法--->准備開始執行異步任務"); } //此處strings[0]對應於AsyncTask //中的第一個參數,即異步任務的輸入參數. //此處Bitmap對應於AsyncTask //中的第三個參數,即異步任務的輸出結果. @Override protected Bitmap doInBackground(String... strings) { System.out.println("調用doInBackground()方法--->開始執行異步任務"); Bitmap bitmap=null; if(mAsyncTaskPerformInterface!=null){ bitmap=mAsyncTaskPerformInterface.performAsyncTask(strings[0]); } return bitmap; } //此處Bitmap對應於AsyncTask //中的第三個參數,即異步任務的輸出結果. @Override protected void onPostExecute(Bitmap bitmap) { System.out.println("調用onPostExecute()方法--->異步任務執行完畢"); if(mAsyncTaskCallbackInterface!=null){ mAsyncTaskCallbackInterface.asyncTaskFinishCallback(bitmap); } } //異步執行時在主線程中更新異步任務的執行信息 //此處values[0]對應於AsyncTask //中的第二個參數,即異步任務的執行進度. @Override protected void onProgressUpdate(Integer... values) { return; } //異步任務被取消時,在主線程中執行相關的操作 @Override protected void onCancelled() { super.onCancelled(); System.out.println("調用onCancelled()方法--->異步任務被取消"); } }
main.xml如下:
Android計算器編寫代碼
其實這個安卓計算機,所有的後台思想與《C#計算器編寫代碼》是一模一樣的。Win窗體程序移植到安卓,從C#到Java其實很簡單的,因為兩者的基本語法都很相像,唯一的難點是安
Android開發筆記(一百二十五)自定義視頻播放器
視頻播放方式在Android中播放視頻的方式有兩種:1、使用MediaPlayer結合SurfaceView進行播放。其中通過SurfaceView顯示視頻的畫面,通過M
Android bluetooth介紹(三): 藍牙掃描(scan)設備分析
關鍵詞:藍牙blueZ A2DP、SINK、sink_connect、sink_disconnect、sink_suspend、sink_resume、sink_is_
【安卓逆向】偷梁換柱之計算機二級C語言掌上通注冊機編寫教程
今天在逛安智的時候看到一個軟件,我對注冊碼驗證的程序比較感興趣哈,- -那個帖子的軟件是通過爆破法實現破解的,之前我在這個帖子講過http://www.52pojie.c