Android 異步下載封裝

public class HttpDownFilesRequest extends AsyncTask{

private UserCallBack back;// 傳入接口

private String code;// 請(qǐng)求返回碼

private String Url;// 請(qǐng)求URL地址;

private Context context;// 上下文

private boolean heard;// 是否加session頭

private ProgressDialog dialog;// 對(duì)話框

private String seveFilepath;

int count = 0;

static boolean cancelUpgrade = false;

/**

* 請(qǐng)求構(gòu)造方法

*

* @param context

*? ? ? ? ? ? 上下文內(nèi)容

* @param back

*? ? ? ? ? ? 接口用于得到返回值

* @param code

*? ? ? ? ? ? 返回標(biāo)記code

* @param Url

*? ? ? ? ? ? 請(qǐng)求鏈接

* @param heard

*? ? ? ? ? ? 標(biāo)題頭

* @param seveFilepath

*? ? ? ? ? ? 保存文件路徑

*/

public HttpDownFilesRequest(Context context, UserCallBack back,

String seveFilepath, String code, String Url, boolean heard,

boolean IsCompress) {

this.back = back;

this.seveFilepath = seveFilepath;

this.code = code;

this.Url = Url;

this.context = context;

this.heard = heard;

}

@Override

protected String doInBackground(String... arg0) {

String result = "";

if (!NetUtils.checkNetworkInfo(context)) {

result = "網(wǎng)絡(luò)異常";

return "網(wǎng)絡(luò)未連接";

}

back.undayway(true);

/*

* 新增 7-26 @sunql

*/

HttpParams httpParameters = new BasicHttpParams();

httpParameters.setParameter(HTTP.UTF_8, HTTP.UTF_8);

// 設(shè)置 連接請(qǐng)求超時(shí)時(shí)間

HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);

// 設(shè)置 socket 讀取超時(shí)時(shí)間

HttpConnectionParams.setSoTimeout(httpParameters, 20000);

HttpClient client = new DefaultHttpClient(httpParameters);

// 請(qǐng)求超時(shí)

client.getParams().setParameter(

CoreConnectionPNames.CONNECTION_TIMEOUT, Config.httpTimeOut);

HttpGet get = new HttpGet(Url);

HttpResponse response;

InputStream is = null;

FileOutputStream fileOutputStream = null;

try {

response = client.execute(get);

HttpEntity entity = response.getEntity();

final long length = entity.getContentLength();

is = entity.getContent();

fileOutputStream = null;

if (is != null) {

File file = new File(seveFilepath);

fileOutputStream = new FileOutputStream(file);

byte[] buf = new byte[1024];

int ch = -1;

count = 0;

while ((ch = is.read(buf)) != -1) {

fileOutputStream.write(buf, 0, ch);

count += ch;

// 反饋下載進(jìn)度

publishProgress((int) (count * 100 / length));

if (cancelUpgrade)

break;

}

fileOutputStream.flush();

// 下載完成

if (count == length) {

result = "下載完成";

}

}

result = EntityUtils.toString(response.getEntity());

} catch (ClientProtocolException e) {

result = "下載失敗";

} catch (IOException e) {

result = "IO異常";

} catch (Exception e) {

} finally {

if (is != null) {

try {

is.close();

} catch (IOException e) {

Log.e("DownloadThread", e.toString());

result = "IO異常";

}

}

if (fileOutputStream != null) {

try {

fileOutputStream.close();

} catch (IOException e) {

Log.e("DownloadThread", e.toString());

result = "IO異常";

}

}

}

return result;

}

@Override

protected void onPostExecute(String result) {// 在doInBackground執(zhí)行完成后系統(tǒng)會(huì)自動(dòng)調(diào)用,result是返回值

if (dialog != null && dialog.isShowing()) {

dialog.dismiss();

dialog = null;

}

String msg = "";

if (result.equals("下載完成")) {

context.startActivity(getApkFileIntent(seveFilepath));

back.onSuccess(result, code);// 請(qǐng)求成功接口

} else if (result.equals("網(wǎng)絡(luò)異常")) {

Toast.makeText(context, result, Toast.LENGTH_SHORT).show();

back.onFail(result, code);

} else if (result.trim().equals("IO異常")) {

Toast.makeText(context, result, Toast.LENGTH_SHORT).show();

back.onFail(result, code);// 請(qǐng)求失敗接口

} else if (result.equals("下載失敗")) {

Toast.makeText(context, result, Toast.LENGTH_SHORT).show();

back.onFail(result, code);// 請(qǐng)求失敗接口

}

if (!msg.equals("")) {

Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();

}

}

@Override

protected void onPreExecute() {// 執(zhí)行后臺(tái)耗時(shí)操作前執(zhí)行

if (!code.equals("下載插件...")) {

dialog = new ProgressDialog(context);

dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

dialog.setMessage("正在下載...");

dialog.setCancelable(false);

dialog.setCanceledOnTouchOutside(false);

dialog.show();

}

}

@Override

protected void onProgressUpdate(Integer... progress) {

for (int i = 0; i < progress.length; i++) {

System.out.println("progress" + i + "=" + progress[i]);

}

if (progress[0] > 0) {

dialog.setMessage("下載中...");

}

dialog.setProgress((int) (progress[0]));

}

// Android獲取一個(gè)用于打開(kāi)APK文件的intent

public static Intent getApkFileIntent(String param) {

Intent intent = new Intent();

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction(android.content.Intent.ACTION_VIEW);

Uri uri = Uri.fromFile(new File(param));

intent.setDataAndType(uri, "application/vnd.android.package-archive");

return intent;

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铅辞,一起剝皮案震驚了整個(gè)濱河市譬胎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖惶我,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件专挪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡攒读,警方通過(guò)查閱死者的電腦和手機(jī)朵诫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)薄扁,“玉大人剪返,你說(shuō)我怎么就攤上這事〉嗣罚” “怎么了脱盲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)日缨。 經(jīng)常有香客問(wèn)我钱反,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任面哥,我火速辦了婚禮哎壳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尚卫。我一直安慰自己归榕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布吱涉。 她就那樣靜靜地躺著蹲坷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邑飒。 梳的紋絲不亂的頭發(fā)上循签,一...
    開(kāi)封第一講書(shū)人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音疙咸,去河邊找鬼县匠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撒轮,可吹牛的內(nèi)容都是我干的乞旦。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼题山,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼兰粉!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起顶瞳,我...
    開(kāi)封第一講書(shū)人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤玖姑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后慨菱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體焰络,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年符喝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闪彼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡协饲,死狀恐怖畏腕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情茉稠,我是刑警寧澤描馅,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站战惊,受9級(jí)特大地震影響流昏,放射性物質(zhì)發(fā)生泄漏扎即。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一况凉、第九天 我趴在偏房一處隱蔽的房頂上張望谚鄙。 院中可真熱鬧,春花似錦刁绒、人聲如沸闷营。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)傻盟。三九已至,卻和暖如春嫂丙,著一層夾襖步出監(jiān)牢的瞬間娘赴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工跟啤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诽表,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓隅肥,卻偏偏與公主長(zhǎng)得像竿奏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子腥放,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容