xutil的使用,淺談xUtils3的基本使用方法

Xutils3,分四大模塊,view,數據庫模塊,圖片模塊,網絡模塊

第一步,添加jar包:xUtils-3.3.22.jar,這個百度一下,免費下載很多,這裏就不貼出來了。add as library,

第二步,在你的app中進行綁定並初始化,創建MyApp繼承自Applacation,記得在清單文件中進行聲明:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
    }
}
<application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
如果進行網絡操作或者sd卡操作,還得加權限:

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


一切準備就緒,下面開始正式的進行描述:

1,view模塊,通過註解的方式進行綁定和點擊事件,註冊解綁:

//綁定佈局
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
    //綁定控件初始化
    @ViewInject(R.id.text_view)
    TextView text_view;
    @ViewInject(R.id.btn_view1)
    Button button_view01;
    @ViewInject(R.id.btn_view2)
    Button button_view02;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        綁定
        x.view().inject(this);
        text_view.setText("什麼都沒做呢");


    }

    @Event(value = {R.id.btn_view1, R.id.btn_view2}),方法必須是私有的
    private void getEvent(View view) {
        switch (view.getId()) {
            case R.id.btn_view1:
                text_view.setText("這是01按鈕響應");
                break;
            case R.id.btn_view2:
                text_view.setText("這是02按鈕響應");
                break;
        }


    }
}
這裏我寫了兩個按鈕和一個文本框,當點擊按鈕的時候,文本框分別會顯示不同的文本。注意紅色的地方是必須要添加的,

在點擊事件註解中他其實相當於

//等同於@Event(value={R.id.btn_get,R.id.btn_post},type=View.OnClickListener.class)
只是這裏默認的是view.onclick事件,如果要更改,直接將type進行更換即可,下面我在簡單的從fragment和adapter,等地方講解以下不同的地方,其他使用方式一致:

在fragment中,其他正常使用,但是返回view時這樣寫:

 return  x.view().inject(this, inflater, container);
在適配器中:

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;
    }
在適配器中如果你要使用xutil需要在將viewhoder和convertView,進行綁定,圖片也需要進行上邊的關聯。其他控件正常使用即可
到這裏第一個模塊就結束了,


網絡模塊:

網絡請求簡單講有幾個核心的方法:

get請求

Cancelable cancelable = x.http().get(params, callback);
post請求

 Cancelable cancelable = x.http().post(params, callback);
他有兩個參數,第一個是它需要的請求參數,第二個是一個回調方法,在下邊的封住工具類中具體的說明了兩個參數的生成過程:

封裝的發送請求的工具類:

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().post(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() {

    }


}
有了這些工具類之後就可以進行一些網絡請求,get和post操作了:

示例:get

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);


            }

        });
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);

            }
        });

上傳文件:

/**
     * 上傳文件(支持多文件上傳)
     */
    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);
            }

        });

    }
其他的同上,只是調用的方法是工具類中的其他方法而已,這裏就不一一列舉了

在接下來的文章裏進行後邊兩個模塊的講解(網址):

http://blog.csdn.net/qq_35681180/article/details/53889157
















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章