Android Xutils框架使用问题及解决办法
刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个小问题整理一下。
关于Xtuls框架的Http模块的get请求方法,会有缓存问题——即进行get请求时,在缓存规定的时间内,如果发送同样的请求url,则不会再次请服务器发送请求,而是直接返回上次请求的结果。 之前写了一篇博客已经介绍的很详细了,可查看《Android
Xutils框架HttpUtil Get请求缓存问题》。
二、 如何直接在HTTP请求时发送一个字符串
首先,我想先说下,如何使用Xutils的框架HTTP模块向服务器发送数据,这里必须介绍一个API:com.lidroid.xutils.http.RequestParams,我不贴出该类的源码了,且把方法给大家看下:
从以上方法可以看出,它提供的几个方法非常方便,不仅可以直接使用addQueryStringParameter(String name, String value)方法,将参数以key-value的形式放入其中,(一般用于get请求),还有addBodyParameter(String name, String value) ,讲参数放在Http的body中;还有addHeader(String name,
String value)等方法,允许添加HTTP请求的Header,可谓是方便之极。
下面有人会问了,如果我不以key-value的形式上传参数,而是想直接把一串字符(JSON串,普通字符串等)传到服务器中,那该怎么办呢?
有办法!
1. 对于Get请求,如果要直接上传一串字符,可以直接把它连接在url上。
比如我要请求的地址是: http://www.imooc.com/api/teacher,需要上传的参数是“{"id": 1,"learner": 12312}”,那我可以直接把他拼接在url上,变成" http://www.imooc.com/api/teacher?{"id": 1,"learner": 12312}"
服务器按照约定,再进行相应的处理就好了。当然对于上述的请求,字符串中有特殊字符,我们要求对其进行URL编码: URLEncoder.encode(),之后才可以上传。
2. 对于Post请求,使用requestParams.setBodyEntity(HttpEntity bodyEntity)
如果我们上传的是字符串,使用HttpEntity的子类实例StringEntity即可: requestParams.setBodyEntity(new StringEntity(""))。
三、 java.net.URISyntaxException的解决办法
前些天做项目,使用Xutils Http get请求时,当我发送的一串字符串中含有特殊字符,就会发生这种情况。查找了一些网上资料,说地址中涉及了特殊字符,如‘|’‘&’等。所以不能直接用String代替URI来访问。必须采用%0xXX方式来替代特殊字符。但这种办法不直观。所以只能先把String转成URL,再能过URL生成URI的方法来解决问题。代码如下:
URL url = new URL(strUrl);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
HttpClient client = new DefaultHttpClient();
HttpGet httpget = new HttpGet(uri);
看懂了这里,所以我们看下Xutils源码的URIBuilder.java源文件,发现它的构造方法是直接把传入的url构造成了uri:
public URIBuilder(final String uri) {
try {
digestURI(new URI(uri));
} catch (URISyntaxException e) {
LogUtils.e(e.getMessage(), e);
}
}
简要修改下源码:
public URIBuilder(String uri) {
try {
URL e = new URL(uri);
this.digestURI(new URI(e.getProtocol(), e.getHost(), e.getPath(), e.getQuery(), (String)null));
} catch (Exception var3) {
LogUtils.e(var3.getMessage(), var3);
}
}
这就好了,重新编译xutil.jar文件,可以放心使用了。
当然了,之前说了,对于get请求的特殊字符,我们可以采用URLEncoder.encode()进行特殊字符的编码来解决。 可是,我试了下,用这个方法并没能解决我的问题,所以我才采取了修改源码的方法。有兴趣的同学可以再次尝试下。
后记:
推荐几篇比较好的关于Xutils框架的文章,挺全面的:
1. http://www.tuicool.com/articles/nMFb2q Android开源项目xUtils HttpUtils模块分析
2. https://github.com/wyouflf/xUtils XUtils github地址
3. http://blog.csdn.net/zuiwuyuan/article/category/2217073
Xutils框架基本使用介绍
Android Xutils框架使用问题及解决办法的更多相关文章
- Android Xutils 框架(转)
Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 Vi ...
- 配置Android环境遇到的问题及解决办法
配置Android环境遇到的问题及解决办法: 1 环境安装地址 http://pan.baidu.com/s/1jGzNzyI 2 其他: 2.1 安装 2.1.1 安装JDK,JRE 成功安装之后, ...
- vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法
vue 单文件 样式写了scoped 不能覆盖框架原有样式的解决办法 在vue 里面<style scoped></style> 是为了让样式只影响本身自己组件的样式,不改变全 ...
- import android.support.v4或者import android.support.v7提示导入错误解决办法
转自: http://blog.csdn.net/forandever/article/details/37655139 在使用Eclipse开发andriod程序时,程序中提示import and ...
- Andriod学习笔记2:“Your content must have a ListView whose id attribute is 'android.R.id.list'”问题的解决办法
问题描述 activity_main.xml代码如下: <?xml version="1.0" encoding="utf-8"?> <Lin ...
- Android Studio生成javadoc出错的解决办法
一般使用Android Studio生成javadoc会有两个问题: 空指针异常 文档乱码 解决办法如下: 第1个问题:Tools --> Generate JavaDoc -->打开对话 ...
- Android开发遇到的异常及解决办法
Android开发遇到的错误及解决方法1. Unable to resolve target 'android-7' 解决方案: 修改工程目录下的default.properties文件里的内容tar ...
- Android SDK Manager无法更新的解决办法
Fetching https://dl-ssl.google.com/android/repository/addons_list-1.xmlFailed to fetch URL https://d ...
- Android 开发遇到的问题及解决办法
Failed to resolve: com.android.support:appcompat-v7:23.4.0 问题解决办法: 1.在Android SDK Manager中找到对应的SDK版本 ...
随机推荐
- 洛谷P1147 连续自然数和 [2017年6月计划 数论01]
P1147 连续自然数和 题目描述 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M. 例子:1998+1999+2000+2001+2002 = 10000,所以 ...
- php分页查询的简单实现代码
<body><h1>分页查询</h1><?phpinclude("DADB.class.php");$db=new DADB();$tj= ...
- NoSQL最新现状和趋势:云NoSQL数据库将成重要增长引擎
NoSQL最早起源于1998年,但从2009年开始,NoSQL真正开始逐渐兴起和发展.回望历史应该说NoSQL数据库的兴起,完全是十年来伴随互联网技术,大数据数据的兴起和发展,NoSQL在面临大数据场 ...
- 安装 Composer
参考百度经验:http://jingyan.baidu.com/article/4f34706ed04013e386b56d72.html Composer下载:https://getcomposer ...
- token流程图
- 缺氧debug模式开启及功能
在游戏OxygenNotIncluded_Data文件夹创建一个debug_enable.txt的空文本文档 在缺氧目录下添加debug_enable.txt文件 按删除键就可以开启debug模式 需 ...
- Apache httpd问题汇总
1.Apache服务器下载到本地解压到路径下:C:\ProgramFiles\Apache 后,启动时报错:serverroot must be a valid directory 解决办法:1.打开 ...
- 支付宝 python alipay 集成(转)
即时到帐只是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款,支付宝收到款项后,马上通知你,并且此笔款项与交易脱离关系,商家可以马上使用. 即时到帐只对企业客户服务,注册成功企业账号以后,申 ...
- 使用 javascript 替换 jQuery
使用 javascript 替换 jQuery jQuery 曾风靡一个时代,大大降低了前端开发的门槛,丰富的插件也是前端开发者得心应手的武器库,但是,这个时代终于要落幕了.随着 JS 标准和浏览器的 ...
- python中的输入和输出
输入和输出 输出: 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, ...