xutils 3.0でダウンロード項目の更新を行います。


xUtils概要
xUtilsは多くの実用的なandroidツールを含んでいます。
xUtilsは大ファイルのアップロードをサポートし、より全面的なhttp要求プロトコルのサポート(10種類の述語)は、より柔軟なORMを持ち、より多くのイベントの注釈がサポートされ、混淆の影響を受けない…
xUitls最低互換android 2.2(appi level 8)
現在xUtilsは主に四つのモジュールがあります。
DbUtilsモジュール:
Androidのormフレームの中で、1行のコードは添削して調べることができます。
トランザクションをサポートし、デフォルトで閉じる;
カスタムテーブル名、列名、外部キー、一意性制約、NOT NULL制約、CHECK制約などを注釈することができます。
結合外鍵をサポートして、エンティティを保存する時、外キー関連エンティティは自動的に保存または更新されます。
外部キー関連エンティティを自動的に読み込み、遅延負荷をサポートします。
チェーン表現のクエリをサポートし、より直感的な検索語義は、以下の紹介またはsampleの例を参照してください。
View Utilsモジュール:
Androidのiocフレームワークは、UI、リソース、イベントバインディングを行うことができます。
新しいイベントバインディング方式は、混淆ツールを使って混同しても正常に動作できます。
現在はよく使われている20種類のイベントのバインディングをサポートしています。ViewComment Listener類とcomp.lidroid.xutils.view.annotations.eventを参照してください。
HttpUtilsモジュール:
同期、非同期方式の要求をサポートします。
大きなファイルのアップロードをサポートしています。大きなファイルをアップロードしても、oomはできません。
GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTTIONS,TRACE,CONNET要求をサポートします。
ダウンロードは301/302をサポートしています。設定がConteet-Dispossitionによってダウンロードされたファイルをリネームするかどうかをサポートしています。
テキストの内容を返す要求(デフォルトではGET要求のみ有効)はキャッシュをサポートし、デフォルトの期限切れ時間と現在の要求の期限切れ時間を設定します。
BitmapUtilsモジュール:
bitmapをロードする時は、bitmapロード中に現れるoomとandroid容器が急速にスライドする時に出るピクチャズレなどを考慮する必要がありません。
ネットワーク画像とローカル画像のロードをサポートします。
メモリ管理はlruアルゴリズムを使用して、bitmapメモリをよりよく管理します。
スレッド読み込みスレッド数、キャッシュサイズ、キャッシュパス、ロード表示動画などが設定できます。
以上の話は以下のために下地を作って、次に主題に入ります。
書いた例は簡単です。xutils 3.0でダウンロード項目の更新を行います。
1.まずネットで要求し、バージョンが更新されるかどうかを判断する。
2.更新するなら、パチンコを一つ弾いて、システムが持参したDialogを使って、ダウンロードのバージョン番号とダウンロードの内容を提示して見せます。
3.ユーザーがダウンロードをクリックすると、ダウンロードを開始し、ダウンロードする時にレベルの進捗状況を表示します。
4.ダウンロードが完了したら、プログレスバーが消え、システムインストールアプリを呼び出します。
下記はコードで使用されるxutilsのjarパッケージは3.32バージョンです。

package com.item.weixin;
import java.io.File;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.x;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.Window;
import android.widget.Button;
/**
*   xutils  
* 
* @author Administrator
* 
*/
public class LoginActivity extends Activity {
private Button ll_update;
private ProgressDialog pDialog;
private String nowVersion;
private ProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_login);
ll_update = (Button) findViewById(R.id.btn_login);
ll_update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
checkUpdate();
}
});
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(
getPackageName(), 0);
nowVersion = packageInfo.versionName;
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
*     ,
*/
protected void checkUpdate() {
// TODO Auto-generated method stub
proDialogShow(LoginActivity.this, "    ...");
RequestParams params = new RequestParams("url");
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
PDialogHide();
System.out.println("      ");
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
PDialogHide();
try {
JSONObject object = new JSONObject(arg0);
boolean success = object.getBoolean("succee");
if (success) {
String desc = object.getString("desc");
String downloadurl = object.getString("downloadurl");
String versionname = object.getString("versionname");
if (nowVersion.equals(versionname)) {
System.out.println("       ,    ");
} else {
//   ,         
setUpDialog(versionname, downloadurl, desc);
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
/**
* 
* @param versionname
*         
* @param downloadurl
*       
* @param desc
*      
*/
protected void setUpDialog(String versionname, final String downloadurl,
String desc) {
// TODO Auto-generated method stub
AlertDialog dialog = new AlertDialog.Builder(this).setCancelable(false)
.setTitle("  " + versionname + "  ").setMessage(desc)
.setNegativeButton("  ", null)
.setPositiveButton("  ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
setDownLoad(downloadurl);
}
}).create();
dialog.show();
}
/**
*    
* 
* @param downloadurl
*    url
* 
*/
@SuppressLint("SdCardPath")
protected void setDownLoad(String downloadurl) {
// TODO Auto-generated method stub
RequestParams params = new RequestParams(downloadurl);
params.setAutoRename(true);//    
params.setSaveFilePath("/mnt/sdcard/demo.apk");
x.http().get(params, new Callback.ProgressCallback<File>() {
@Override
public void onCancelled(CancelledException arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable arg0, boolean arg1) {
// TODO Auto-generated method stub
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
System.out.println("      ");
}
@Override
public void onFinished() {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(File arg0) {
// TODO Auto-generated method stub
if(progressDialog!=null && progressDialog.isShowing()){
progressDialog.dismiss();
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(Uri.fromFile(new File(Environment
.getExternalStorageDirectory(), "demo.apk")),
"application/vnd.android.package-archive");
startActivity(intent);
}
@Override
public void onLoading(long arg0, long arg1, boolean arg2) {
// TODO Auto-generated method stub
progressDialog.setMax((int)arg0);
progressDialog.setProgress((int)arg1);
}
@Override
public void onStarted() {
// TODO Auto-generated method stub
System.out.println("    ");
progressDialog = new ProgressDialog(LoginActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//        
progressDialog.setMessage("     ...");
progressDialog.setProgress(0);
progressDialog.show();
}
@Override
public void onWaiting() {
// TODO Auto-generated method stub
}
});
}
private void proDialogShow(Context context, String msg) {
pDialog = new ProgressDialog(context);
pDialog.setMessage(msg);
// pDialog.setCancelable(false);
pDialog.show();
}
private void PDialogHide() {
try {
if (pDialog != null && pDialog.isShowing()) {
pDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
以上は小编が皆さんに绍介したxutils 3.0でダウンロードプロジェクトの更新を行います。皆さんのために役に立つことを望んでいます。ここでも私たちのサイトを応援してくれてありがとうございます。