xutil的使用,浅谈xUtils3的基本使用方法

来源:互联网 发布:网络电视是什么 编辑:程序博客网 时间:2024/05/17 05:26

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
















1 0