Xutils使用手册(四)——网络请求
2016-05-25 09:27
447 查看
Xutils使用手册——网络请求
网络请求方法介绍
方法介绍
1,回调对象介绍
xutils提供了两种回调对象,即通用回调对象和缓存回调对象通用的回调对象
//普通的网络请求回调对象,这个回调对象里没有提供缓存方法 Callback.CommonCallback<String> commonCallback = new Callback.CommonCallback<String>() { @Override public void onCancelled(CancelledException cex) { //请求被取消时回调此方法 } @Override public void onSuccess(String result) { //请求成功时回调方法,其中result参数为请求到的数据 } @Override public void onError(Throwable ex, boolean isOnCallback) { //请求过程中出现错误时回调此方法 } @Override public void onFinished() { //整个请求过程结束的回调方法 } };
缓存回调对象
//带缓存的网络请求对调对象,此回调对象提供了本地缓存机制,对于长时间不变的数据可以使用此对象 Callback.CacheCallback<String> cacheCallback = new Callback.CacheCallback<String>() { /** * 此方法为本地加载回调方法,本地没有数据则不会调用此方法 * @param result 缓存中得到的数据 * @return true 如果缓存中有数据就不再进行网络请求 * false 得到缓存数据后仍进行网络请求 */ @Override public boolean onCache(String result) { return false; } @Override public void onSuccess(String result) { } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } };
进度实时回调对象
//带下载进度的回调方法 Callback.ProgressCallback progressCallback=new Callback.ProgressCallback() { /** * 下载暂停时回调方法 */ @Override public void onWaiting() { } /** * 下载开始时回调的方法 */ @Override public void onStarted() { } /** * 下载进度实时回调的方法 * @param total 文件总大小 * @param current 当前已下载大小 * @param isDownloading 当前下载状态 */ @Override public void onLoading(long total, long current, boolean isDownloading) { } @Override public void onSuccess(Object result) { } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } };
2,请求参数对象介绍
RequestParams requestParams = new RequestParams("http://www.google.com"); /** * 以下方法请根据需求进行设置,如果没有需求请不要随意进行设置 */ //设置请求代理 { //设置代理地址和端口 InetSocketAddress address = new InetSocketAddress("127.0.0.1", 8080); //创建代理对象 //参数说明(代理方式:DIRECT 直接连接不使用代理、HTTP 代理或者 SOCKET 代理,端口对象) Proxy proxy = new Proxy(Proxy.Type.DIRECT, address); requestParams.setProxy(proxy); } //是否根据头信息自动命名文件 { requestParams.setAutoRename(false); } //数据下载时是否使用断点续传 { requestParams.setAutoResume(true); } //设置缓存文件夹、缓存容量以及缓存存活时间 { requestParams.setCacheDirName("dir"); requestParams.setCacheSize(1024l); requestParams.setCacheMaxAge(3l * 60 * 60 * 1000);//单位为毫秒 } //下载文件时指定文件保存地址 { requestParams.setSaveFilePath("filePath"); } //如果需要获取下载进度的话,下载进度的刷新时间默认为300ms { requestParams.setLoadingUpdateMaxTimeSpan(1000); } /** * 以下为设置请求参数 */ //设置请求头 requestParams.addHeader("user-agent","android-19"); //通用的参数存放方法,此方法会根据参数信息自动判断参数提交方式 requestParams.addParameter("name",new Object()); //如果参数过长,请直接指定 requestParams.addBodyParameter("name","long String");
3,发送请求
Callback.Cancelable request; //get请求 request = x.http().get(requestParams, commonCallback); //post请求 request = x.http().post(requestParams, commonCallback); //自定义请求方式,xutils提供了11中请求方式参数 request = x.http().request(HttpMethod.GET, requestParams, commonCallback); if (!request.isCancelled())//判断当前请求是否中断 request.cancel();//中断请求
到这里 常用的方法都已经介绍完毕了。可能有些同学可能看的云里雾里的,那么就让我们通过下面几个例子来说明具体的用法
具体实现示例
一、初始化xutils
如果不了解如何初始化Xutils框架,请参考我的前几篇关于Xutils的博客开源中国博客主页: http://my.oschina.net/oschenxiaomo/blog
CSDN博客主页: http://blog.csdn.net/qq_32583189
二、请求数据示例(天气预报)
我们参考/detail/2674497919.html
这篇博客,将解析到的数据用于请求天气信息
1,在布局文件中添加一个TextView
<TextView android:id="@+id/tv_show" android:layout_width="match_parent" android:layout_height="match_parent" />
2,增加网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
3,完善代码
package com.doservlet.activity; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import com.doservlet.adapter.CityAdapter; import com.doservlet.adapter.ProvinceAdapter; import com.doservlet.bean.AddrBean; import com.doservlet.bean.Weather; import com.doservlet.xutilsdemo.R; import com.google.gson.GsonBuilder; import org.xutils.common.Callback; import org.xutils.http.RequestParams; import org.xutils.x; import java.io.InputStream; import java.io.InputStreamReader; public class WeatherActivity extends AppCompatActivity { private Spinner spProvince, spCity; private AddrBean addrBean; private ProvinceAdapter adpProvince; private CityAdapter adpCity; private TextView tvShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_weather); initView(); loadData(); register(); } private void register() { spProvince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { adpCity.setCityBeanList(addrBean.getProvinceList().get(position).getCityList()); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spCity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { getWeather(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } private void getWeather(int position) { RequestParams params = new RequestParams("http://wthrcdn.etouch.cn/weather_mini"); params.addParameter("citykey", ((AddrBean.ProvinceBean.CityBean) adpCity.getItem(position)).getCityCode()); x.http().get(params, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Weather weather = new GsonBuilder().create().fromJson(result, Weather.class); tvShow.setText(weather.getData().toString()); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } private void loadData() { try { InputStream inputStream = getApplicationContext().getAssets().open("addr_china.json"); addrBean = new GsonBuilder().create().fromJson(new InputStreamReader(inputStream), AddrBean.class); spProvince.setAdapter(adpProvince); adpProvince.setProvinceBeanList(addrBean.getProvinceList()); spCity.setAdapter(adpCity); adpCity.setCityBeanList(addrBean.getProvinceList().get(0).getCityList()); } catch (Throwable e) { e.printStackTrace(); } } private void initView() { spCity = (Spinner) findViewById(R.id.city_list); spProvince = (Spinner) findViewById(R.id.province_list); adpProvince = new ProvinceAdapter(this); adpCity = new CityAdapter(this); tvShow = (TextView) findViewById(R.id.tv_show); } }
相关文章推荐
- 【网络】HTTP2.0新特性
- 源码解析之–网络层YTKNetwork
- Play Framework 控制层发起HTTP请求 (Send Http Request In Controller)
- Http Header里的Content-Type
- 关于HTTP
- 一次线上http接口调用不通相关的解决过程
- wireshark抓包图解 TCP三次握手/四次挥手详解
- http://honda418.iteye.com/blog/337052/
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
- ios htttp网络请求cookie的读取与写入(NSHTTPCookieStorage)
- IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡
- HTTP in iOS你看我就够
- 三种方法实现移动端HTTPS加速和省电
- 有关网络编程的一些面试
- cs231n 卷积神经网络与计算机视觉 2 SVM softmax
- 148_okhttp和Gson
- 《图解HTTP》学习笔记(六)-HTTP首部
- 基于事件的开源网络库—libevent:应用介绍
- TCP/IP协议、HTTP协议、SOCKET通讯详解
- Apache的httpd.conf的配置详解