Android中のXUtils 3フレームの使い方について詳しく説明する(一)

14266 ワード

xUtils概要
xUtilsは多くの実用的なandroidツールを含んでいます。
xUtilsは大ファイルのアップロードをサポートし、より全面的なhttp要求プロトコルのサポート(10種類の述語)は、より柔軟なORMを持ち、より多くのイベントの注釈がサポートされ、混淆の影響を受けない…
xUitls最低互換android 2.2(appi level 8)
今日はXUtils 3の基本的な紹介を持ってきました。この文章の実例はXUtils 3のAPI文法に基づいて行ったデモンストレーションです。この枠組みについてもよく知っていると思います。
XUtils 3の基本的な知識を紹介します。
XUtils 3は全部で4つの機能があります。注釈モジュール、ネットワークモジュール、写真ロードモジュール、データベースモジュールです。
XUtilsを使うには、libsフォルダにjarパッケージを追加するだけで、サーバーから戻ってきたデータをパッケージ化するなら、Gsonのjarパッケージを導入する必要があります。

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
注釈モジュール
Activityのコメント
1.Applicationのoncreate方法には次のコードを入れます。
x.Ext.init(this)
2.Activityのoncreate方法に次のコードを入れます。
x.view().inject(this)
3.現在のActivityレイアウトをロードするには以下の注が必要です。
@ContentViewはActivityの上に加入しています。
4.Viewの初期化には以下のようなコメントが必要です。
@Inject View
5.コントロールを扱う各種応答イベントには、以下のようなコメントが必要です。
@Event

@ContentView(R.layout.activity_main) 
public class MainActivity extends ActionBarActivity { 
@ViewInject(R.id.btn_get) 
Button btn_get; 
@ViewInject(R.id.btn_post) 
Button btn_post; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
x.view().inject(this); 
btn_get.setText("  get  "); 
btn_post.setText("  post  "); 
} 
//   @Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class) 
@Event(value={R.id.btn_get,R.id.btn_post}) 
private void getEvent(View view){ 
switch(view.getId()){ 
case R.id.btn_get: 
Toast.makeText(MainActivity.this, btn_get.getText().toString().trim(), 0).show(); 
break; 
case R.id.btn_post: 
Toast.makeText(MainActivity.this, btn_post.getText().toString().trim(), 0).show(); 
break; 
} 
} 
テストを通して、btn_をクリックする時に見つけました。getボタンを押すと、「get要求を送信する」効果が出ます。ここに来て、皆さんはXUtilsに対する注釈として基本的な認識があります。以下、私が強調しているのは、@Eventという注釈がデフォルトの場合、type属性はView.OnClikListener.classです。他のクリック効果を実現するには、type値だけを修正すればいいです。
もう一つ注意したいのはボタンのクリックイベントはprvateで修飾しなければなりません。
Fragmentのコメント:

@ContentView(R.layout.fragment_first) 
public class FirstFragment extends Fragment{ 
private MyAdapter adapter; 
private List<Person> list=new ArrayList<>(); 
private List<String> listUrl=new ArrayList<>(); 
private List<String> listName=new ArrayList<>(); 
@ViewInject(R.id.btn_test) 
Button btn_test; 
@ViewInject(R.id.listView) 
ListView listView; 
@Override 
public View onCreateView(LayoutInflater inflater, 
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
return x.view().inject(this, inflater, container); 
} 
View Holderのコメント:

public class MyAdapter extends BaseAdapter{ 
private Context context; 
private List<Person> list; 
private LayoutInflater mInflater; 
private ImageOptions options; 
public ViewHolder holder; 
public MyAdapter(Context context, List<Person> list) { 
this.context = context; 
this.list = list; 
this.mInflater=LayoutInflater.from(context); 
options=new ImageOptions.Builder().setLoadingDrawableId(R.drawable.ic_launcher) 
.setLoadingDrawableId(R.drawable.ic_launcher).setUseMemCache(true).setCircular(true).build(); 
} 
@Override 
public int getCount() { 
return list.size(); 
} 
@Override 
public Object getItem(int position) { 
return list.get(position); 
} 
@Override 
public long getItemId(int position) { 
return position; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
holder=null; 
if(convertView==null){ 
convertView=mInflater.inflate(R.layout.itemone, null); 
holder=new ViewHolder(); 
x.view().inject(holder,convertView); 
convertView.setTag(holder); 
} 
else{ 
holder=(ViewHolder) convertView.getTag(); 
} 
Person bean=list.get(position); 
holder.tv_name.setText(bean.getName()); 
x.image().bind(holder.iv_image, bean.getImgUrl(), options); 
return convertView; 
} 
class ViewHolder{ 
@ViewInject(R.id.tv_name) 
private TextView tv_name; 
@ViewInject(R.id.iv_image) 
private ImageView iv_image; 
} 
上のコードはView Holderの標準モードを注釈しています。皆さんは完全に見て分かると信じています。ここでは画像をロードして、XUtils 3のネット画像をロードする方法を使いました。後は詳しく説明します。
ネットワークモジュール
XUtilsのネットワーク要求方法といくつかのネットワーク要求の枠組みの使い方は非常に似ています。簡単なパッケージを行いました。
パッケージは全部で3つのファイルがあります。それぞれはネットワーク要求ツール類XUtilで、応答データの解析クラスを要求します。もう一つは成功を要求するインターフェースフィードバッククラスです。
コードは以下の通りです

public class XUtil { 
/** 
*   get   
* @param <T> 
*/ 
public static <T> Cancelable Get(String url,Map<String,String> map,CommonCallback<T> callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry<String, String> entry : map.entrySet()){ 
params.addQueryStringParameter(entry.getKey(), entry.getValue()); 
} 
} 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
/** 
*   post   
* @param <T> 
*/ 
public static <T> Cancelable Post(String url,Map<String,Object> map,CommonCallback<T> callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry<String, Object> entry : map.entrySet()){ 
params.addParameter(entry.getKey(), entry.getValue()); 
} 
} 
Cancelable cancelable = x.http().post(params, callback); 
return cancelable; 
} 
/** 
*      
* @param <T> 
*/ 
public static <T> Cancelable UpLoadFile(String url,Map<String,Object> map,CommonCallback<T> callback){ 
RequestParams params=new RequestParams(url); 
if(null!=map){ 
for(Map.Entry<String, Object> entry : map.entrySet()){ 
params.addParameter(entry.getKey(), entry.getValue()); 
} 
} 
params.setMultipart(true); 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
/** 
*      
* @param <T> 
*/ 
public static <T> Cancelable DownLoadFile(String url,String filepath,CommonCallback<T> callback){ 
RequestParams params=new RequestParams(url); 
//       
params.setAutoResume(true); 
params.setSaveFilePath(filepath); 
Cancelable cancelable = x.http().get(params, callback); 
return cancelable; 
} 
} 
public class JsonResponseParser implements ResponseParser { 
//              
@Override 
public void checkResponse(UriRequest request) throws Throwable { 
} 
/** 
*   result resultType      
* 
* @param resultType      (        ) 
* @param resultClass       
* @param result       
* @return 
* @throws Throwable 
*/ 
@Override 
public Object parse(Type resultType, Class<?> resultClass, String result) throws Throwable { 
return new Gson().fromJson(result, resultClass); 
} 
} 
public class MyCallBack<ResultType> implements Callback.CommonCallback<ResultType>{ 
@Override 
public void onSuccess(ResultType result) { 
//                        
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
//                          
} 
@Override 
public void onCancelled(CancelledException cex) { 
} 
@Override 
public void onFinished() { 
} 
} 
1.get要求の送信例:

// get           :http://www.k780.com/api/entry.baidu 
String url="http://api.k780.com:88/?app=idcard.get"; 
Map<String,String> map=new HashMap<>(); 
map.put("appkey", "10003"); 
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); 
map.put("format", "json"); 
map.put("idcard", "110101199001011114"); 
XUtil.Get(url, map, new MyCallBack<PersonInfoBean>(){ 
@Override 
public void onSuccess(PersonInfoBean result) { 
super.onSuccess(result); 
Log.e("result", result.toString()); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
2.postリクエストの送信

String url="http://api.k780.com:88/?app=idcard.get"; 
Map<String,Object> map=new HashMap<>(); 
map.put("appkey", "10003"); 
map.put("sign", "b59bc3ef6191eb9f747dd4e83c99f2a4"); 
map.put("format", "json"); 
map.put("idcard", "110101199001011114"); 
XUtil.Post(url, map, new MyCallBack<PersonInfoBean>(){ 
@Override 
public void onSuccess(PersonInfoBean result) { 
super.onSuccess(result); 
Log.e("result", result.toString()); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
3.ファイルをアップロードする

/** 
*     (       ) 
*/ 
private void uploadfile() { 
//       
String url=""; 
Map<String,Object> map=new HashMap<>(); 
//          
//map.put(key, value); 
//map.put(key, value); 
XUtil.UpLoadFile(url, map, new MyCallBack<String>(){ 
@Override 
public void onSuccess(String result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
} 
4.ファイルをダウンロードする

private void downloadfile() { 
//       
String url=""; 
//           
String filepath=""; 
XUtil.DownLoadFile(url, filepath,new MyCallBack<File>(){ 
@Override 
public void onSuccess(File result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
5.ダウンロードファイルの進捗バー

private void downloadprogressfile() { 
//       
String url=""; 
//           
String filepath=""; 
XUtil.DownLoadFile(url, filepath,new MyProgressCallBack<File>(){ 
@Override 
public void onSuccess(File result) { 
super.onSuccess(result); 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
@Override 
public void onLoading(long total, long current, 
boolean isDownloading) { 
super.onLoading(total, current, isDownloading); 
} 
}); 
} 
6.get要求を送信する(サーバはxml形式で返される)

private void getxml() { 
String url="http://flash.weather.com.cn/wmaps/xml/china.xml"; 
XUtil.Get(url, null, new MyCallBack<String>(){ 
@Override 
public void onSuccess(String xmlString) { 
super.onSuccess(xmlString); 
try{ 
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
XmlPullParser xmlPullParser = factory.newPullParser(); 
xmlPullParser.setInput(new StringReader(xmlString)); 
int eventType = xmlPullParser.getEventType(); 
while (eventType != XmlPullParser.END_DOCUMENT) { 
switch (eventType) { 
case XmlPullParser.START_TAG: 
String nodeName = xmlPullParser.getName(); 
if ("city".equals(nodeName)) { 
String pName = xmlPullParser.getAttributeValue(0); 
Log.e("TAG", "city is " + pName); 
} 
break; 
} 
eventType = xmlPullParser.next(); 
} 
}catch(Exception e){ 
e.printStackTrace(); 
} 
} 
@Override 
public void onError(Throwable ex, boolean isOnCallback) { 
super.onError(ex, isOnCallback); 
} 
}); 
} 
画像ロードモジュール
使い方:

x.image().bind(imageView, url, imageOptions); 
x.image().bind(imageView, "file:///sdcard/test.gif", imageOptions); 
x.image().bind(imageView, "assets://test.gif", imageOptions); 
x.image().bind(imageView, url, imageOptions, new Callback.CommonCallback<Drawable>() {...}); 
x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...}); 
x.image().loadFile(url, imageOptions, new Callback.CommonCallback<File>() {...}); 
Xutils 3のapiはまだ比較的簡単です。最初のパラメータはViewに入ってきました。二つ目のパラメータは一つの画像のネットワークアドレスに入ってきました。三番目のパラメータは主に画像をロードする構成です。
ImageOptionsという種類を見てみましょう。

ImageOptions options=new ImageOptions.Builder() 
//           
.setLoadingDrawableId(R.drawable.ic_launcher) 
//           
.setFailureDrawableId(R.drawable.ic_launcher) 
//       
.setUseMemCache(true) 
//         
.setCircular(true) 
//    gif 
.setIgnoreGif(false) 
.build(); 
残りの配置はソースコードを参考にしてください。
ロードされた画像を操作する必要があれば、使用できます。

x.image().loadDrawable(url, imageOptions, new Callback.CommonCallback<Drawable>() {...});
戻ってきたDrawableオブジェクトを通じて画像の処理を行い、プロジェクトの個性化の要求を満たす。
こんなに多く話しましたが、少なくともXUtils 3に対して基本的な理解ができます。XUtils 3のデータベースの使い方が多いので、この文章は関連しません。次の文章はXUtils 3のデータベースモジュールを詳しく説明します。皆さん、今すぐ操作してください。本論文の関連するあらゆる実例は下記のデモに含まれます。ご参考ください。
関連記事:
xutils 3.0でダウンロード項目の更新を行います。
Android xUtilsは3.0に更新した後の基本的な使用規則を詳しく説明します。
以上は、小编が绍介したAndroidのXUtils 3のフレームワークの使い方を详しく解说します。皆さんに何かご迷惑があったら、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。