找呀志_通过开源框架引AsyncHttpClient处理get/post要求
一个、开源参考架构的方法。
方法一
找到下载的文件的源代码,Com中的src文件夹下
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
方法二
引入jar包到libs下
二、引用开源框架发送get请求给server步骤:
1.创建异步请求端对象
2.发送get请求,(get请求參数含义:请求的url地址。异步请求的handler)
3.在成功请求里(status:状态返回码,headers:头部请求信息,responseBody返回结果)设置控件内容
三、引用开源框架发送post请求给server步骤
1.创建异步请求端对象
2.发送post请求,(get请求參数含义:请求的url地址;异步请求的handler)
3.封装请求參数
4.在成功请求里(status:响应状态码,headers:响应头信息,responseBody对应内容的字节码)设置控件内容
补充:
查看帮助文档我们知道,在post方法中传递參数时候能够创建RequestParams的对象,put进你所想要赋的值。例如以下图:
实例解析:当用户登录时。在界面输出用户是否登录成功
执行结果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
项目实现
1.布局文件:同login布局文件
2.在AndroidManifest.xml加入internet权限
<uses-permission android:name="android.permission.INTERNET"/>
3.LoginActivity的代码(代码中具体加了凝视,请细致阅读)
- package com.example.android_httpasync;
- import org.apache.http.Header;
- import com.loopj.android.http.AsyncHttpClient;
- import com.loopj.android.http.AsyncHttpResponseHandler;
- import com.loopj.android.http.RequestParams;
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.TextUtils;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
- /**
- * 通过开源框架AsyncHttpClient的get/post请求处理
- * @author zhaoyazhi
- *
- */
- public class MainActivity extends Activity {
- private EditText et_username;
- private EditText et_password;
- private TextView tv_result;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_login);
- findView();
- }
- /**
- * 查找控件
- */
- public void findView() {
- et_password = (EditText) findViewById(R.id.editpass);
- et_username = (EditText) findViewById(R.id.editusername);
- tv_result = (TextView) findViewById(R.id.tv_result);
- }
- /**
- * 登陆button操作
- *
- * @param v
- */
- public void login(View v) {
- // 获取点击控件的id
- int id = v.getId();
- // 依据id进行推断
- switch (id) {
- case R.id.btn_login:// 进行登录操作
- // 获取用户名密码
- final String userName = et_username.getText().toString();
- final String userPass = et_password.getText().toString();
- // 推断是否为空
- if (TextUtils.isEmpty(userName) || TextUtils.isEmpty(userPass)) {
- Toast.makeText(getApplicationContext(), "用户名或者密码不能为空", 0)
- .show();
- } else {
- Toast.makeText(getApplicationContext(), "发送请求道server", 0).show();
- // loginByAsyncHttpClientGet(userName, userPass);
- loginAsyncHttpClientPost(userName, userPass);
- }
- break;
- default:
- break;
- }
- }
- /**
- * 通过开源框架AsyncHttpClient的post请求处理
- * @param userName
- * @param userPass
- */
- private void loginAsyncHttpClientPost(final String userName,
- final String userPass) {
- // 发送请求到server
- AsyncHttpClient client = new AsyncHttpClient();
- String url = "http://172.16.237.144:8080/Login/LoginServlet";
- // 创建请求參数
- RequestParams params = new RequestParams();
- params.put("username", userName);
- params.put("userpass", userPass);
- // 运行post方法
- client.post(url, params, new AsyncHttpResponseHandler() {
- @Override
- public void onSuccess(int statusCode, Header[] headers,
- byte[] responseBody) {
- // 设置值
- tv_result.setText(new String(responseBody));
- }
- @Override
- public void onFailure(int statusCode, Header[] headers,
- byte[] responseBody, Throwable error) {
- // 打印错误信息
- error.printStackTrace();
- }
- });
- }
- /**
- * 通过开源框架AsyncHttpClient的get请求处理
- * @param userName
- * @param userPass
- */
- private void loginByAsyncHttpClientGet(final String userName,
- final String userPass) {
- // 创建异步请求端对象
- AsyncHttpClient client = new AsyncHttpClient();
- String url = "http://172.16.237.144:8080/Login/LoginServlet?username="
- + userName + "&userpass=" + userPass;
- // 发送get请求对象
- client.get(url, new AsyncHttpResponseHandler() {
- @Override
- // statusCode:状态返回码,headers:头部请求信息,responseBody返回结果
- public void onSuccess(int statusCode, Header[] headers,
- byte[] responseBody) {
- tv_result.setText(new String(responseBody));
- }
- @Override
- public void onFailure(int statusCode, Header[] headers,
- byte[] responseBody, Throwable error) {
- // 输出错误信息
- error.printStackTrace();
- }
- });
- }
- }
为了加强我们理解,在onSuccess方法中增加一些測试语句:
在控制台输出结果例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
jar文件资源:http://download.csdn.net/detail/zhaoyazhi2129/7400787
源代码:http://download.csdn.net/detail/zhaoyazhi2129/7400799
版权声明:本文博客原创文章,博客,未经同意,不得转载。
找呀志_通过开源框架引AsyncHttpClient处理get/post要求的更多相关文章
- 找呀志_通过开源框架引AsyncHttpClient上传文件
一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...
- 找呀志_使用SQLiteDatabase增删改提供的搜索方法和事务
知识具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDa ...
- Pyhton开源框架(加强版)
info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...
- Python开源框架
info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...
- 分布式计算开源框架Hadoop入门实践
目录(?)[+] Author :岑文初 Email: wenchu.cenwc@alibaba-inc.com msn: cenwenchu_79@hotmail.com blog: http:// ...
- iOS常用第三方开源框架和优秀开发者博客等
博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...
- Android酷炫实用的开源框架(UI框架)
Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...
- Android开源框架ImageLoader的完美例子
本文转载于:http://blog.csdn.net/wwj_748/article/details/10079311 2013年8月19日开源框架之Universal_Image_Loader学习 ...
随机推荐
- ZOJ 3820 2014ACM/ICPC牡丹江司B称号
3797714 2014 - 10 - 12 21:58 : 19 Accepted 3820 C++ 1350 70240 zz_1215 比較麻烦的一道题吧,開始的时候不停的段异常,后面知道是爆栈 ...
- STL--F - Sequence(n*m->之前的最低要求m个月)
F - Sequence Time Limit:6000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- NBA球员 ESPN前20排名:詹姆斯再居榜首
2014年 ESPN球员实力最后排名 没想到 保罗-乔治没有上榜.之前预測的火箭两大明星排名落后了,杜兰特排到第8有点出乎意料. 戴维斯升得那么快有点出乎意料,一个球队拥有两位排前十位的球队:骑士,快 ...
- Android开发学习总结(五)——Android应用目录结构分析(转)
一.手动创建android项目 手动创建一个Android项目,命名为HelloWorld,命令如下: android create project -n HelloWorld -t 1 -p E:/ ...
- Codeforces Beta Round #3 A. Shortest path of the king
标题效果: 鉴于国际棋盘两点,寻求同意的操作,是什么操作的最小数量,在操作过程中输出. 解题思路: 水题一个,见代码. 以下是代码: #include <set> #include < ...
- 【Spark亚太研究院系列】Spark道路的真正的主人-第一章 构建Spark星团(第五步)(6)
结束historyserver例如,下面的命令可以看到: 第四步:验证Hadoop分布式集群 首先在hdfs文件系统上创建两个文件夹.创建步骤例如以下所看到的: watermark/2/text/aH ...
- JNDI-j2ee
Database Connection Pool (DBCP) Configurations The default database connection pool implementation i ...
- uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))
标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q< ...
- 不同版本的SQL Server之间数据导出导入的方法及性能比较
原文:不同版本的SQL Server之间数据导出导入的方法及性能比较 工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论.补充. 0 ...
- [6] 算法路 - 双向冒泡排序的Shaker
Shaker序列 –算法 1. 气泡排序的双向进行,先让气泡排序由左向右进行.再来让气泡排序由右往左进行,如此完毕一次排序的动作 2. 使用left与right两个旗标来记录左右两端已排序的元素位置. ...