Android中のXUtils 3フレームの使い方について詳しく説明する(一)
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パッケージを導入する必要があります。
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
もう一つ注意したいのはボタンのクリックイベントはprvateで修飾しなければなりません。
Fragmentのコメント:
ネットワークモジュール
XUtilsのネットワーク要求方法といくつかのネットワーク要求の枠組みの使い方は非常に似ています。簡単なパッケージを行いました。
パッケージは全部で3つのファイルがあります。それぞれはネットワーク要求ツール類XUtilで、応答データの解析クラスを要求します。もう一つは成功を要求するインターフェースフィードバッククラスです。
コードは以下の通りです
使い方:
ImageOptionsという種類を見てみましょう。
ロードされた画像を操作する必要があれば、使用できます。
こんなに多く話しましたが、少なくともXUtils 3に対して基本的な理解ができます。XUtils 3のデータベースの使い方が多いので、この文章は関連しません。次の文章はXUtils 3のデータベースモジュールを詳しく説明します。皆さん、今すぐ操作してください。本論文の関連するあらゆる実例は下記のデモに含まれます。ご参考ください。
関連記事:
xutils 3.0でダウンロード項目の更新を行います。
Android xUtilsは3.0に更新した後の基本的な使用規則を詳しく説明します。
以上は、小编が绍介したAndroidのXUtils 3のフレームワークの使い方を详しく解说します。皆さんに何かご迷惑があったら、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
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のフレームワークの使い方を详しく解说します。皆さんに何かご迷惑があったら、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。