开·云体育app下载安装 Android网络编程(下)--- 框架AsyncHttpClient/上传文件
1.AsyncHttpClient
android - async - http开源平台能让我们不费吹灰之力地得到网络数据,能够让我们顺顺利利地给服务器发送数据,是这样的情况。
它属于异步框架,在底层借助线程池去处理并发请求,效率相当高,使用着实特别简单,最为关键的正此。
以先之前的情况来说,我们于安卓系统之上开展项目之际,像存在诸多情形如下达好多图片、网页或者别的资源之时,大多数的开发者往往会挑选一种这般的模型kia云手机版登录,即一个线程执行一项下载任务 。
由于安卓集成带有的HttpClient,或者java的URL,又或者UrlConnection,默认情况下都是阻塞式的操作。
这种模型效率不高kiayun手机版登录app游戏登录入口.手机端安装.cc,对并发要求高的应用来讲,并不适用。
AsyncHttpClient,身为android - async - http框架里的一个核心应用类,其使用具备简便性,是能够对付文本、二进制等各类格式的web资源的 。
2.使用AsyncHttpClient上传文件到服务器
对于服务器端而言,要运用框架,那便是commons - fileupload - 1.2.1.jar以及commons - io - 1.4.jar 。
工程下导入jar包并build path
2)编写Servlet
3) 安卓客户端编写
清单中添加联网权限
编写类,核心代码
实例化一个名为AsynHttpClient的对象,命名为clientkiayun手机版登录入口,句号。
//执行post请求
客户端进行发送操作,发送的地址为url,发送的参数是params,使用的响应处理器为responseHandler,但请记住这是在进行一种特定的、与网络交互相关的操作,。
三个参数分别代表:url地址,请求参数,响应
请求参数:
新建了一个名为RequestParams 的对象,将其命名参数设为params。
params.put("file", file);
响应,针对匿名内部类,去重写onSuccess以及onFailure方法,。
新的异步 HTTP 响应处理程序(){...};。
代码:
服务器端FileUploadServlet
与“/FileUploadServlet”路径相关联的网络服务小服务端 ,。
公共类文件上传Servlet,它继承自HttpServlet ,形成这样一种类的继承关系 。
私有的静态的最终的长整型变量serialVersionUID被赋值为1L 。
public FileUploadServlet() {
super();
}
受保护的, void 类型的,用于执行获取操作的方法,其参数为 HttpServletRequest 请求对象,。
引发 ServletException 异常,抛出 IOException 异常,出现以下情况(HttpServletResponse response) 。
布尔值的是否为多部分,是通过Servlet文件上传对于请求的是否为多部分内容来判断的,这里的判断结果存储在一个名叫isMultipart的变量中 是否为多部分,是通过Servlet文件上传对于请求的是否为多部分内容来判断的这一情况得出的。 。
if (isMultipart) {
String realpath等于,request获取会话,会话获取Servlet 上下文 。
.getRealPath("/files");
System.out.println(realpath);
新建一个 File 对象,将其命名为 dir,使用 realpath 创建该对象 。
if (!dir.exists())
dir.mkdirs();
存在一个名为factory的FileItemFactory,它被赋值为一个DiskFileItemFactory对象,这一对象是新创建出来的。
获得一个ServletFileUpload 新建实例,此实例基于一个factory对象,由 ServletFileUploadupload 实现 ,这是一个新实例,通过factory创建出来。
上传实施以“UTF - 8”来设置头部编码的操作,其方式是,通过特定的设置行为,依据“UTF - 8”这一编码标准。
try {
List进行解析请求操作,将请求传入到上传相关的解析函数里,从而得到一系列项,这些项被存储在了变量中来表示。 , , 。
for (FileItem item : items) {
if (item.isFormField()) {
这是这样的情况,由item获取FieldName,将其赋值给String类型的name1,此操作的目的是得到请求参数的名称 。
定义一个字符串类型变量 “value”,通过 “item” 获取 “UTF - 8” 对应的值,以此来得到参数值 。
System.out.println, name1与value进行拼接,拼接后的结果是name1加上等于符号再加value ,这里的等于符号是字符形式的 ,之后将拼接后的结果进行输出 。
} else {
写一个新的文件,这个文件用当前系统时间的毫秒数命名,放置在指定的目录中,由一个名为item实例去执行此操作 。
+ item.getName().substring(
获取物品名称,查找其中最后一个点的位置,获取该位置的索引值 。
}
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
doGet(request, response);
}
}
保护着,要去执行,在进行后处理,针对超文本传输协议请求,这个请求,它是一个,由超文本传输协议请求对象所构成的,请求对象,并且,它是作为,超文本传输协议。
HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
客户端
/**
* 上传文件
*
* @param v
*/
public void upload(View v) {
try {
// 客户端
创建了一个名为AsyncHttpClient的对象,将其赋值给了名为client的变量 。
// 上传的文件
新建一个文件对象,该对象对应的文件路径是,通过获取外部存储目录函数获取目录后,再进行后续操作所获得的那个路径 , 。
"a.jpg");
// url
有一个字符串,它被命名为url,其具体的值是,http://10.0.2.2:8080/web/FileUploadServlet ,句号。
// 请求参数
构建一个名为“params”的“RequestParams”类型对象,使其初始化为新创建的实例。
params.put("file", file);
// 执行post请求,上传文件,获取响应
client进行post操作,将url作为参数,params作为参数,使用new创建AsyncHttpResponseHandler对象 ,然后执行该操作 。
// 上传成功
@Override
public void, 处于成功状态时发挥作用, 面对整型的状态码, 以及由头部信息所构成的数组, 这里特别声明, 头部被组织在数组之中形成特定数据结构可被此方法所处理, 此方法将会对这些内容作出。
String content) {
调用超类的成功处理方法,传入状态码、头部信息以及内容数据,以此来执行相应的操作,完成特定的任务,达成预期的结果,实现既定的目标,达成所需的效果,并带有完成任务后的反馈,。
通过获取应用上下文,创建一个Toast对象,并传入“上传成功”这个文本内容,同时设置时长为0,然后调用show方法将其显示出来。
}
// 上传失败
@Override
就变为,公开的, void呢,在失败这一情况时,针对可抛出的东西也就是错误,还有涉及内容为字符串的情况,执行的方法是, onFailure 。
当出现错误时,执行超类的失败处理,将错误和内容传递进去 。
针对应用上下文环境,创建一个吐司提示,其内容为“上传失败”这几个字,然后,设置这个吐司提示的显示时长为默认时长此时为短暂显示,最后,将这个设置好的吐司提示显示出来 。
}
});
}当捕捉到文件未找到异常时,捕获该由e标识符表明的异常,{。
e.printStackTrace();
}
}