• 【转】Android应用中使用AsyncHttpClient来异步网络数据


    摘要: 首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载 http://download.csdn.net/detail/xujinyang1234/5767419 测试的Activity,用到了RequstClient,LoadCacheResponseLogin...

    首先下载AsyncHttpClient的库文件,可以自行搜索,可以到下面地址下载

    http://download.csdn.net/detail/xujinyang1234/5767419

    测试的Activity,用到了RequstClient,LoadCacheResponseLoginouthandler,LoadDatahandler三个重写的类

     

    1. package com.example.asynchttpclienttest;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5. import android.view.Menu;  
    6. import android.widget.TextView;  
    7.   
    8. import com.loopj.android.http.RequestParams;  
    9.   
    10. public class MainActivity extends Activity {  
    11.     private TextView test;  
    12.   
    13.     @Override  
    14.     protected void onCreate(Bundle savedInstanceState) {  
    15.         super.onCreate(savedInstanceState);  
    16.         setContentView(R.layout.activity_main);  
    17.         init();  
    18.     }  
    19.   
    20.     private void init() {  
    21.         test = (TextView) findViewById(R.id.test);  
    22.         System.out.println("拉拉");  
    23.         RequestParams param = new RequestParams();  
    24.         param.put("id"1 + "");  
    25.         RequstClient.get(  
    26.                 "http://58.192.23.75:8080/xiaoxiao2/ColumnServletAndroid",  
    27.                 param, new LoadCacheResponseLoginouthandler(MainActivity.this,  
    28.                         new LoadDatahandler() {  
    29.                             @Override  
    30.                             public void onStart() {  
    31.                                 super.onStart();  
    32.                                 test.setText("开始拉去数据");  
    33.                             }  
    34.   
    35.                             @Override  
    36.                             public void onSuccess(String data) {  
    37.                                 super.onSuccess(data);  
    38.                                 test.setText(data);  
    39.                                 System.out.println("拉倒的数据" + data);  
    40.                             }  
    41.   
    42.                             @Override  
    43.                             public void onFailure(String error, String message) {  
    44.                                 super.onFailure(error, message);  
    45.                                 test.setText("错误的数据" + message);  
    46.                             }  
    47.   
    48.                             @Override  
    49.                             public void onFinish() {  
    50.                                 super.onFinish();  
    51.                             }  
    52.                         }));  
    53.     }  
    54.   
    55.     @Override  
    56.     public boolean onCreateOptionsMenu(Menu menu) {  
    57.         getMenuInflater().inflate(R.menu.main, menu);  
    58.         return true;  
    59.     }  
    60.   
    61. }  

    RequstClient.java

     

     

    1. package com.example.asynchttpclienttest;  
    2.   
    3. import com.loopj.android.http.AsyncHttpClient;  
    4. import com.loopj.android.http.AsyncHttpResponseHandler;  
    5. import com.loopj.android.http.RequestParams;  
    6.   
    7. public class RequstClient {  
    8.     /** 
    9.      * 定义一个异步网络客户端 默认超时未20秒 当超过,默认重连次数为5次 默认最大连接数为10个 
    10.      */  
    11.     private static AsyncHttpClient mClient = new AsyncHttpClient();  
    12.     static {  
    13.         mClient.setTimeout(20000);  
    14.     }  
    15.     public static void post(String url, AsyncHttpResponseHandler handler) {  
    16.         post(url, null, handler);  
    17.     }  
    18.     /** 
    19.      * post 请求 
    20.      *  
    21.      * @param url 
    22.      *            API 地址 
    23.      * @param params 
    24.      *            请求的参数 
    25.      * @param handler 
    26.      *            数据加载句柄对象 
    27.      */  
    28.     public static void post(String url, RequestParams params,  
    29.             AsyncHttpResponseHandler handler) {  
    30.         System.out.println("进入post");  
    31.         mClient.post(url, params, handler);  
    32.     }  
    33.     public static void get(String url, AsyncHttpResponseHandler handler) {  
    34.   
    35.     }  
    36.     public static void get(String url, RequestParams params,  
    37.             AsyncHttpResponseHandler handler) {  
    38.         System.out.println("进入get");  
    39.         mClient.get(url, params, handler);  
    40.     }  
    41. }  

     

     

    1. package com.example.asynchttpclienttest;  
    2.   
    3. import org.apache.http.Header;  
    4.   
    5. import android.content.Context;  
    6.   
    7. import com.loopj.android.http.AsyncHttpResponseHandler;  
    8.   
    9. public class LoadCacheResponseLoginouthandler extends AsyncHttpResponseHandler {  
    10.     private Context context;  
    11.     private LoadDatahandler mHandler;  
    12.   
    13.     public LoadCacheResponseLoginouthandler(Context context,  
    14.             LoadDatahandler mHandler) {  
    15.         this.context = context;  
    16.         this.mHandler = mHandler;  
    17.     }  
    18.     @Override  
    19.     public void onStart() {  
    20.         super.onStart();  
    21.         mHandler.onStart();  
    22.     }  
    23.     @Override  
    24.     public void onFailure(Throwable error, String content) {  
    25.         super.onFailure(error, content);  
    26.         mHandler.onFailure("""网络连接超时");  
    27.     }  
    28.     @Override  
    29.     public void onFinish() {  
    30.         super.onFinish();  
    31.         mHandler.onFinish();  
    32.     }  
    33.   
    34.     @Override  
    35.     public void onSuccess(int statusCode, Header[] headers, String content) {  
    36.         super.onSuccess(statusCode, headers, content);  
    37.         System.out.println("得到的返回码" + statusCode);  
    38.         try {  
    39.             switch (statusCode) {  
    40.             case 200:  
    41.                 mHandler.onSuccess(content);  
    42.                 System.out.println("返回的内容" + content);  
    43.                 break;  
    44.             case 401:  
    45.                 onFailure("401""没有登录");  
    46.   
    47.                 break;  
    48.             case 403:  
    49.                 onFailure("404""没有权限");  
    50.                 break;  
    51.             default:  
    52.                 break;  
    53.             }  
    54.   
    55.         } catch (Exception e) {  
    56.             e.printStackTrace();  
    57.         }  
    58.     }  
    59.   
    60.     /** 
    61.      * 出错 
    62.      *  
    63.      * @param error 
    64.      * @param errorMessage 
    65.      */  
    66.     public void onFailure(String error, String errorMessage) {  
    67.         if (errorMessage != null) {  
    68.             mHandler.onFailure(error, errorMessage);  
    69.         }  
    70.     }  
    71. }  



     

     

    接口:

     

     

    1. package com.example.asynchttpclienttest;  
    2.   
    3. public class LoadDatahandler {  
    4.     /** 
    5.      * 加载数据时调用 
    6.      */  
    7.     public void onStart() {};  
    8.     /** 
    9.      * 加载数据调用,得到缓存数据 
    10.      * @param data 
    11.      */  
    12.     public void onLoadCaches(String data) {};  
    13.     /** 
    14.      * 当调用服务器接口成功获取数据时,调用这个方法 
    15.      * @param data 
    16.      */  
    17.     public void onSuccess(String data) {};  
    18.       
    19.     /** 
    20.      * 当调用服务器接口获取数据失败时,调用这个方法 
    21.      * @param error     出错原因 
    22.      * @param message   出错原因描述 
    23.      */  
    24.     public void onFailure(String error, String message) {};  
    25.     /** 
    26.      * 加载完成时调用 
    27.      */  
    28.     public void onFinish() {};  
    29.   
    30. }  


    扩展:

    Android在AsyncHttpClient框架的基础上定制能直接返回对象数组的框架

  • 相关阅读:
    2019/5/13 洛谷P4742 【tarjan缩点 + 拓扑dp】
    图论500题
    欧拉回路与欧拉路径
    二分图的判定
    二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】
    网络流三大算法【邻接矩阵+邻接表】POJ1273
    马拉车算法,mannacher查找最长回文子串
    tarjan算法(强连通分量 + 强连通分量缩点 + 桥(割边) + 割点 + LCA)
    luogu P5774 [JSOI2016]病毒感染 线性 dp
    luguo P2519 [HAOI2011]problem a dp+贪心
  • 原文地址:https://www.cnblogs.com/chq3272991/p/5748760.html
Copyright © 2020-2023  润新知