当前位置: 代码迷 >> Android >> Android-async-http 事例
  详细解决方案

Android-async-http 事例

热度:428   发布时间:2016-04-27 23:44:45.0
Android-async-http 例子

                这是我重新回到Android,新学习的一篇关于Android-async-http框架的的例子,简单的介绍下,也算自己做的小笔记一篇


                 先介绍下它是干嘛的

                  首先 它是第三方开源类库,在Android开发中,请求服务器获取数据太常见了,然后它就是解决一般请求方式的麻烦之处的,简单来说,用了它,以后请求服务器就变得简单啦

                  其次,看框架名称 带有 async,有经验的开发人员都知道,它是异步的, 既然是异步的 又用在Android里面,这说明它是用在非UI线程的。还有一个好处就是 不用 手动 new Thread线程了, 是不是很好用撒。


                 擦,还是上代码吧!

                1,到官网或者其他什么地方,下载下jar包, 或者源码,都行,随便 

                2,把jar包导入到你的工程里面 ,并进行build ,如下图

                


                  3.如果想看源码,就把源码library\src\main\java的com包黏贴到项目中的src目录下,如下图

       

       4. 就是写主要的代码了。这是封装的一个util

       package cn.com.asynchttp;


import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import com.loopj.android.http.JsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;


public class HttpUtill {


private static AsyncHttpClient client = new AsyncHttpClient();// 实例化对象


static {
client.setTimeout(5000); // 设置连接超时,默认10s
}


/**
* 用一个完整 的url 获取一个String 对象

* @param urlString
* @param res
*/
public static void get(String urlString, AsyncHttpResponseHandler res) {
client.get(urlString, res);
}


/**
* url里面带参数

* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, AsyncHttpResponseHandler res) {
client.get(urlString, params, res);
}


/**
* 不带参数,获取json对象或者数组
* @param urlString
* @param res
*/
public static void get(String urlString, JsonHttpResponseHandler res) {
client.get(urlString, res);


}


/**
* 带参数,获取json对象或者数组
* @param urlString
* @param params
* @param res
*/
public static void get(String urlString, RequestParams params, JsonHttpResponseHandler res) {


client.get(urlString, params, res);


}


/**
* 下载数据使用,会返回byte数据
* @param uString
* @param bHandler
*/
public static void get(String uString, BinaryHttpResponseHandler bHandler) {


client.get(uString, bHandler);


}


public static AsyncHttpClient getClient() {


return client;
}


      接下来就是 Activity了 


      package cn.com.asynchttp;


import org.apache.http.Header;
import org.apache.http.protocol.HTTP;


import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.RequestParams;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import cn.com.R;


/**
 * android-aysnc-http框架学习
 * 
 * @author Administrator
 *
 */
public class StudyActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);


setContentView(R.layout.studyasynchttp);


Button btn_click = (Button) findViewById(R.id.btn_studyasynchttp_click);
btn_click.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {


String url = "http://这是我项目服务器的地址,这里就不贴上了";


RequestParams params = new RequestParams();
params.add("key", "value"); //这里是参数,可以用put也可以用add,随便
params.add("key", "value");


HttpUtill.get(url, params, new AsyncHttpResponseHandler() {


@Override
public void onSuccess(int arg0, Header[] arg1, byte[] arg2) {
// TODO Auto-generated method stub


System.out.println(" onSuccess -- arg0--------" + arg0);
System.out.println(new String(arg2));//这是服务器返回来的数据了,这是没有源码的,//面是有源码的。


}


@Override
public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {
// TODO Auto-generated method stub
System.out.println("onFailure---arg0--------" + arg0);
}
});

HttpUtill.get(url, params, new AsyncHttpResponseHandler() {

@Override
public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {

}

@Override
public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

}
});
}
});


}


}


布局文件,一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    
    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/btn_studyasynchttp_click"
        android:text="studysynchttp"
        />
    


</LinearLayout>


搜噶,完事!


下面分享下  POST,GET,请求方式! 也是参考别人的, 这都无所谓咯!

    /** 
     * 采用AsyncHttpClient的Post方式进行实现 
     * @param userName 
     * @param userPass 
     */  
    public void HttpClientPost(String userName, String userPass) {  
        AsyncHttpClient client = new AsyncHttpClient(); // 创建异步请求的客户端对象  
        String url = "http://"; // 定义请求的地址  
        // 创建请求参数的封装的对象  
        RequestParams params = new RequestParams();  
        params.put("username", userName); // 设置请求的参数名和参数值  
        params.put("userpass", userPass);// 设置请求的参数名和参数  
        // 执行post方法  
        client.post(url, params, new AsyncHttpResponseHandler() {  
            /** 
             * 成功处理的方法 
             * statusCode:响应的状态码; headers:相应的头信息 比如 响应的时间,响应的服务器 ; 
             * responseBody:响应内容的字节 
             */  
            @Override  
            public void onSuccess(int statusCode, Header[] headers,  
                    byte[] responseBody) {  
                if (statusCode == 200) {  
                    tv_result.setText(new String(responseBody)); // 设置显示的文本  
                }  
            }  
  
            /** 
             * 失败处理的方法 
             * error:响应失败的错误信息封装到这个异常对象中 
             */  
            @Override  
            public void onFailure(int statusCode, Header[] headers,  
                    byte[] responseBody, Throwable error) {  
                error.printStackTrace();// 把错误信息打印出轨迹来  
            }  
        });  
    } 


 GET

/** 
     * 采用AsyncHttpClient的Get方式进行实现 
     * @param userName 
     * @param userPass 
     */  
    public void HttpClientGet(String userName, String userPass) {  
        // 创建异步的客户端对象  
        AsyncHttpClient client = new AsyncHttpClient();  
         
        String url = "";  // 请求的地址 
        // 创建请求参数的封装的对象  
        RequestParams params = new RequestParams();  
        params.put("username", userName); // 设置请求的参数名和参数值  
        params.put("userpass", userPass);// 设置请求的参数名和参数  
          
        // 发送get请求的时候 url地址 相应参数,匿名回调对象  
        client.get(url, params,new AsyncHttpResponseHandler() {  
            @Override  
            public void onSuccess(int statusCode, Header[] headers,  
                    byte[] responseBody) {  
                // 成功处理的方法  
                System.out  
                        .println("statusCode-------------------" + statusCode);  
                // 遍历头信息  
                for (int i = 0; i < headers.length; i++) {  
                    Header header = headers[i];  
                    System.out.println("header------------Name:"  
                            + header.getName() + ",--Value:"  
                            + header.getValue());  
                }  
                // 设置控件内容  
                tv_result.setText(new String(responseBody));  
            }  
  
            @Override  
            public void onFailure(int statusCode, Header[] headers,  
                    byte[] responseBody, Throwable error) {  
                // 失败处理的方法  
                error.printStackTrace();  
            }  
        });  
    }  





        

            

                

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案