一个、开源参考架构的方法。

方法一

找到下载的文件的源代码,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布局文件
http://blog.csdn.net/zhaoyazhi2129/article/details/26509763
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要求的更多相关文章

  1. 找呀志_通过开源框架引AsyncHttpClient上传文件

    一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...

  2. 找呀志_使用SQLiteDatabase增删改提供的搜索方法和事务

    知识具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9026093 MainActivity.java,User.java,BaseDa ...

  3. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  4. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

  5. 分布式计算开源框架Hadoop入门实践

    目录(?)[+] Author :岑文初 Email: wenchu.cenwc@alibaba-inc.com msn: cenwenchu_79@hotmail.com blog: http:// ...

  6. iOS常用第三方开源框架和优秀开发者博客等

    博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...

  7. Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解

    转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 本篇文章 ...

  8. Android酷炫实用的开源框架(UI框架)

    Android酷炫实用的开源框架(UI框架) 前言 忙碌的工作终于可以停息一段时间了,最近突然有一个想法,就是自己写一个app,所以找了一些合适开源控件,这样更加省时,再此分享给大家,希望能对大家有帮 ...

  9. Android开源框架ImageLoader的完美例子

    本文转载于:http://blog.csdn.net/wwj_748/article/details/10079311 2013年8月19日开源框架之Universal_Image_Loader学习 ...

随机推荐

  1. 在SQL2008中,如何让id自动生成并自动递增?如何让时间默认生成?

    id自动递增:    如果是用语句操作,这样定义:ID INT IDENTITY,如果是要生成一对数字,这样定义:ID INT IDENTITY(1,1)    如果要在SQL Server的表中设置 ...

  2. HDU 5002 Tree

    题意: 一棵树  支持删边加边.路径权值加值.路径权值改值.路径求第二大的数字和其个数 思路: LCT的第二题  题意已经把功能都告诉了  比較裸 要注意的是权值加值和改值两个操作的标记下放问题  要 ...

  3. 《Tips for Optimizing C/C++ Code》译文

    前不久在微博上看到一篇非常好的短文讲怎样对C/C++进行性能优化,尽管其面向的领域是图形学中的光线跟踪,可是还是具有普遍的意义,将其翻译成中文,希望对大家写高质量代码有帮助. 1.     牢记阿姆达 ...

  4. C#内存分配学习

    CLR内存分配分三大块区域:栈.GC堆.大对象堆. 一.线程堆栈(栈) 用于分配值类型实例.栈由操作系统进行管理,不受GC管理,当值类型不在其作用域(主要是指其所在函数内)时,其所占栈空间自动释放.栈 ...

  5. Visual Studio Team Services使用教程--Readers tfs组checkin权限修改

    你也可以只开启部分代码的权限 把上面开启的整个应用的权限先去掉 只开启一个文件的权限

  6. [Python]sqlite3二进制文件存储问题(BLOB)(You must not use 8-bit bytestrings unless you use a text_factory...)

    事情是这种: 博主尝试用Python的sqlite3数据库存放加密后的usernamepassword信息,表是这种 CREATE TABLE IF NOT EXISTS user ( userID ...

  7. Vertica对于所计算的时间SQL声明大全

    词:强.大.所有,强烈推荐 SQL语句 查询结果 select (timestamp '2005-01-17 10:00' - timestamp '2005-01-01'); 16 10:10 se ...

  8. 高性能mysql主存架构

    原文:高性能mysql主存架构 MySQL Replication(Master与Slave基本原理及配置) 主从mysql工作原理: 1:过程: (1)Mysql的复制(replication)是一 ...

  9. CSDN markdown 编辑 第五章 UML

    这里大概只能产生两种类型的图: 序列图 框图 序列图 ```sequence A->B: 一句话证明你非常寂寞. Note right of B: thinking B->B: count ...

  10. 《STL源代码分析》---stl_heap.h读书笔记

    Heap堆的数据结构是经常使用,Heap它还能够存储元件的.但STL并且不提供Heap集装箱.仅仅提供信息Heap算术运算.只支持RandomAccessIterator该容器可以被用作Heap集装箱 ...