android开源框架android-async-http使用

android开源框架android-async-http使用

转:http://www.open-open.com/lib/view/open1369637365753.html

       

android-async-http开源框架可以是我们轻松的获取网络数据或者向服务器发送数据,使用起来也很简单,下面做简单介绍,具体详细使用看官网:https://github.com/loopj/android-async-http

1.新建项目,去官网下载zip包,解压,打开releases文件,把里面最新的jar包,考入项目工程libs目录下,引入包。

2.通过1,就可以使用了,很简单,下面是自己写的demo,用它提供的各种不同方法完成从服务器获取一个json数据:

01 package com.http;
02 import com.loopj.android.http.AsyncHttpClient;
03 import com.loopj.android.http.AsyncHttpResponseHandler;
04 import com.loopj.android.http.BinaryHttpResponseHandler;
05 import com.loopj.android.http.JsonHttpResponseHandler;
06 import com.loopj.android.http.RequestParams;
07  
08 public class HttpUtil {
09     private static     AsyncHttpClient client =new AsyncHttpClient();    //实例话对象
10     static
11     {
12         client.setTimeout(11000);   //设置链接超时,如果不设置,默认为10s
13     }
14     public static void get(String urlString,AsyncHttpResponseHandler res)    //用一个完整url获取一个string对象
15     {
16         client.get(urlString, res);
17     }
18     public static void get(String urlString,RequestParams params,AsyncHttpResponseHandler res)   //url里面带参数
19     {
20         client.get(urlString, params,res);
21     }
22     public static void get(String urlString,JsonHttpResponseHandler res)   //不带参数,获取json对象或者数组
23     {
24         client.get(urlString, res);
25     }
26     public static void get(String urlString,RequestParams params,JsonHttpResponseHandler res)   //带参数,获取json对象或者数组
27     {
28         client.get(urlString, params,res);
29     }
30     public static void get(String uString, BinaryHttpResponseHandler bHandler)   //下载数据使用,会返回byte数据
31     {
32         client.get(uString, bHandler);
33     }
34     public static AsyncHttpClient getClient()
35     {
36         return client;
37     }
38 }

这个类主要列出了我们常用的get方法,在要使用的地方,调用该类就行了。

具体使用的类:

001 package com.http;
002  
003 import java.io.File;
004 import java.io.FileOutputStream;
005  
006 import org.json.JSONArray;
007 import org.json.JSONObject;
008  
009 import android.app.Activity;
010 import android.app.ProgressDialog;
011 import android.os.Bundle;
012 import android.os.Environment;
013 import android.util.Log;
014 import android.view.View;
015 import android.widget.TextView;
016 import android.widget.Toast;
017  
018 import com.loopj.android.http.AsyncHttpResponseHandler;
019 import com.loopj.android.http.BinaryHttpResponseHandler;
020 import com.loopj.android.http.JsonHttpResponseHandler;
021 import com.loopj.android.http.RequestParams;
022  
023 public class MainActivity extends Activity {
024     private TextView textView; // 顶部textview
025     private ProgressDialog pDialog;
026     private TextView textView2; // 下面textview,显示获取的所有数据
027     @Override
028     protected void onCreate(Bundle savedInstanceState) {
029         super.onCreate(savedInstanceState);
030         setContentView(R.layout.activity_main);
031         textView = (TextView) findViewById(R.id.text);
032         textView2 = (TextView) findViewById(R.id.text2);
033     }
034     public void method1(View view) {
035         pDialog = ProgressDialog.show(this, "请稍等", "数据加载中");
036         String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10"; // 一個獲取菜谱的url地址
037         HttpUtil.get(urlString, new AsyncHttpResponseHandler() {
038             public void onSuccess(String arg0) { // 获取数据成功会调用这里
039                 pDialog.dismiss();
040                 textView.setText("获取json数据成功,看下面");
041                 textView2.setText(arg0);
042                 Log.i("hck", arg0);
043             };
044             public void onFailure(Throwable arg0) { // 失败,调用
045                 Toast.makeText(MainActivity.this, "onFailure",
046                         Toast.LENGTH_LONG).show();
047             };
048             public void onFinish() { // 完成后调用,失败,成功,都要掉
049             };
050         });
051     }
052     public void method2(View view) {
053         String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?";
054         RequestParams params = new RequestParams(); // 绑定参数
055         params.put("type", "1");
056         params.put("p", "2");
057         params.put("size", "10");
058         HttpUtil.get(urlString, params, new JsonHttpResponseHandler() {
059             public void onSuccess(JSONArray arg0) { // 成功后返回一个JSONArray数据
060                 Log.i("hck", arg0.length() + "");
061                 try {
062                     textView.setText("菜谱名字:"
063                             + arg0.getJSONObject(2).getString("name")); //返回的是JSONArray, 获取JSONArray数据里面的第2个JSONObject对象,然后获取名字为name的数据值
064                 } catch (Exception e) {
065                     Log.e("hck", e.toString());
066                 }
067             };
068             public void onFailure(Throwable arg0) {
069                 Log.e("hck", " onFailure" + arg0.toString());
070             };
071             public void onFinish() {
072                 Log.i("hck", "onFinish");
073             };
074             public void onSuccess(JSONObject arg0) {   //返回的是JSONObject,会调用这里
075                 Log.i("hck", "onSuccess ");
076                 try {
077                     textView.setText("菜谱名字:"
078                             + arg0.getJSONArray("list").getJSONObject(0)
079                                     .getString("name"));
080                 } catch (Exception e) {
081                     Log.e("hck", e.toString());
082                 }
083             };
084         });
085     }
086     public void method3(View view) {
087         String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?type=1&p=2&size=10";
088         HttpUtil.get(urlString, new JsonHttpResponseHandler() {
089             public void onSuccess(JSONObject arg0) {
090                 try {
091                     textView.setText("菜谱名字:"
092                             + arg0.getJSONArray("list").getJSONObject(1)
093                                     .getString("name"));
094                 } catch (Exception e) {
095                     Log.e("hck", e.toString());
096                 }
097             };
098         });
099     }
100     public void method4(View view) {
101         String urlString = "http://client.azrj.cn/json/cook/cook_list.jsp?";
102         final RequestParams params = new RequestParams();
103         params.put("type", "1");
104         params.put("p", "2");
105         params.put("size", "10");
106         HttpUtil.get(urlString, params, new AsyncHttpResponseHandler() {
107             public void onSuccess(String arg0) {
108                 try {
109                     JSONObject jObject = new JSONObject(arg0);
110                     textView.setText("菜谱名字:"
111                             + jObject.getJSONArray("list").getJSONObject(2)
112                                     .getString("name"));
113                     Log.i("hck", params.getEntity().toString());
114                 } catch (Exception e) {
115                 }
116             };
117         });
118     }
119     public void method5(View view) {
120         String url = "http://f.hiphotos.baidu.com/album/w%3D2048/sign=38c43ff7902397ddd6799f046dbab3b7/9c16fdfaaf51f3dee973bf7495eef01f3b2979d8.jpg";
121         HttpUtil.get(url, new BinaryHttpResponseHandler() {
122             @Override
123             public void onSuccess(byte[] arg0) {
124                 super.onSuccess(arg0);
125                 File file = Environment.getExternalStorageDirectory();
126                 File file2 = new File(file, "cat");
127                 file2.mkdir();
128                 file2 = new File(file2, "cat.jpg");
129                 try {
130                     FileOutputStream oStream = new FileOutputStream(file2);
131                     oStream.write(arg0);
132                     oStream.flush();
133                     oStream.close();
134                     textView.setText("可爱的猫咪已经保存在sdcard里面");
135                 } catch (Exception e) {
136                     e.printStackTrace();
137                     Log.i("hck", e.toString());
138                 }
139             }
140         });
141     }
142 }

布局文件:

01 <ScrollView
02     xmlns:android="http://schemas.android.com/apk/res/android"
03     xmlns:tools="http://schemas.android.com/tools"
04     android:layout_width="match_parent"
05     android:layout_height="match_parent"
06     android:orientation="vertical"
07       android:gravity="center_horizontal"
08     >
09     <LinearLayout
10     android:layout_width="fill_parent"
11     android:layout_height="fill_parent"
12     android:orientation="vertical"
13       android:gravity="center_horizontal">
14     <TextView
15         android:textColor="#FF0000"
16         android:textSize="16sp"
17        android:layout_marginTop="20dp"
18      android:gravity="center_horizontal"
19         android:id="@+id/text"
20         android:layout_width="wrap_content"
21         android:layout_height="wrap_content"
22         android:text="获取数据完成后会显示在这里" />
23 <Button
24     android:layout_marginTop="50dp"
25     android:id="@+id/bt1"
26     android:layout_width="wrap_content"
27     android:layout_height="wrap_content"
28     android:text="第一种"
29     android:onClick="method1"
30     />
31 <Button
32     android:id="@+id/bt2"
33     android:layout_width="wrap_content"
34     android:layout_height="wrap_content"
35     android:text="第2种"
36     android:onClick="method2"
37     />
38 <Button
39     android:id="@+id/bt3"
40     android:layout_width="wrap_content"
41     android:layout_height="wrap_content"
42     android:text="第3种"
43       android:onClick="method3"
44     />
45 <Button
46     android:id="@+id/bt4"
47     android:layout_width="wrap_content"
48     android:layout_height="wrap_content"
49     android:text="第4种"
50       android:onClick="method4"
51     />
52 <Button
53     android:id="@+id/bt5"
54     android:layout_width="wrap_content"
55     android:layout_height="wrap_content"
56     android:text="第5种"
57       android:onClick="method5"
58     />
59   <TextView
60         android:textColor="#FF0000"
61         android:textSize="16sp"
62        android:layout_marginTop="20dp"
63      android:gravity="center_horizontal"
64         android:id="@+id/text2"
65         android:layout_width="wrap_content"
66         android:layout_height="wrap_content"
67          />
68 </LinearLayout>
69 </ScrollView>

很简单很实用,上面只是get方法的,上传数据,和这个也差不多,大家自己建个服务器,试试。记得加入网文网络的权限和向sdcard的访问权限

android开源框架android-async-http使用

时间: 2024-10-14 15:56:14

android开源框架android-async-http使用的相关文章

Android开源框架 Android-Universal-Image-Loader

Android开源框架Universal-Image-Loader就像图片加载守护者,为我们提供了丰富的功能特性: (1)多线程加载图像(异步或同步): (2)高度可定制化imageloader配置(线程池.图片下载器.解码器.内存和磁盘缓存.显示图像选项等): (3)每一个显示图像有许多自定义选项(存根图片,缓存开关,解码选项,位图处理和显示等): (4)支持内存和磁盘上的图像缓存(设备的文件系统和SD卡): (5)监听加载过程(包括下载进度): 下来我们详解如何配置使用Universal-I

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

本篇文章继续为大家介绍Universal-Image-Loader这个开源的图片加载框架,介绍的是图片缓存策略方面的,如果大家对这个开源框架的使用还不了解,大家可以看看我之前写的一篇文章Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用,我们一般去加载大量的图片的时候,都会做缓存策略,缓存又分为内存缓存和硬盘缓存,我之前也写了几篇异步加载大量图片的文章,使用的内存缓存是LruCache这个类,LRU是Least Recently Used 近

greenDao android开源框架数据库更新表的问题

最近使用greenDao当android应用升级数据库新增表或者修改表,发现数据被清空的问题 查找资料也没有找到解决方案,最后查看代码发现需要自己修改SQLiteOpenHelper 1.找到greenDao生成的DaoMaster.java文件,里面有SQLiteOpenHelper实现 2.修改DevOpenHelper类里的   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 方法 通过old

Android开源框架ViewPageIndicator和ViewPager实现Tab导航

前言: 关于使用ViewPageIndicator和ViewPager实现Tab导航,在开发社区里已经有一堆的博客对其进行了介绍,假设我还在这里写怎样去实现.那简直就是老生常谈,毫无新奇感,并且.我也不觉得自己对ViewPageIndicator的理解会比别人好,毕竟我也是看着大神的帖子.在学习实践着. 那我还写这个有啥意义呢?事实上么,就是想在这里记录下.在使用ViewPageIndicator和ViewPager实现Tab导航时,大家有可能会遇到的坑.这个坑.须要我们开发时尽量去避免的. 啥

Android进阶笔记14:RoboBinding(实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架)

1.RoboBinding RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.从简单的角度看,他移除了如addXXListener(),findViewById()这些不必要的代码,连如BufferKnife那样的InjectView都不需要,因为你的代码一般不需要依赖于这些界面组件信息.下面以一个最简单的AndroidMVVM为例. (1)layout 布局 <LinearLayout xmlns:android="

Android开源框架Afinal第一篇——揭开圣女的面纱

Android开源框架Afinal第一篇——揭开圣女的面纱 分类: Android开源框架哪点事2013-09-02 14:25 260人阅读 评论(0) 收藏 举报 Afinal 这是Afinal在github的地址:https://github.com/yangfuhai/afinal Afinal这个框架主要分4块: 1.FinalDB模块:android中的orm框架,一行代码就可以进行增删改查.支持一对多,多对一等查询. 2.FinalActivity模块:android中的ioc框架

android 开源框架推荐

同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http  项目地址:ht

Android 开源框架Universal-Image-Loader完全解析(三)---源代码解读

本篇文章主要是带大家从源码的角度上面去解读这个强大的图片加载框架,自己很久没有写文章了,感觉生疏了许多,距离上一篇文章三个月多了,确实是自己平常忙,换了工作很多东西都要去看去理解,然后加上自己也懒了,没有以前那么有激情了,我感觉这节奏不对,我要继续保持以前的激情,正所谓好记性不如烂笔头,有时候自己也会去翻看下之前写的东西,我觉得知识写下来比在脑海中留存的更久,今天就给大家来读一读这个框架的源码,我感觉这个图片加载框架确实写的很不错,读完代码自己也学到了很多.我希望大家可以先去看下Android

Android——开源框架Universal-Image-Loader + Fragment使用+轮播广告

原文地址: Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解 Android Fragment使用(一) 基础篇 温故知新 Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误 Android Fragment使用(三) Activity, Fragment, We