(尊重劳动成果,转载请注明出处,谢谢。http://www.cnblogs.com/clear5/)

其实android-async-http与网络数据的交互跟与服务器交互都非常简单和相似。

主要用到两个类:

com.loopj.android.http.BinaryHttpResponseHandler; //二进制流文件(图片,音乐,视频等)处理类com.loopj.android.http.TextHttpResponseHandler;   //文本文件处理类

下面开始贴代码,相关指示在注释里标注了。

我这里使用的开发工具为Android Studio。

首先是新建一个project,我这里叫AsyncimageDemo,然后注意导包:android-async-http-1.4.7.jar

先把布局文件搭建好,修改activity_main.xml内容:

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical">
 6    <!-- http://www.cnblogs.com/clear5/ -->  
 7     <LinearLayout
 8         android:id="@+id/btn_line"
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:gravity="center"
12         android:orientation="horizontal">
13
14         <Button
15             android:id="@+id/img_btn"
16             android:layout_width="wrap_content"
17             android:layout_height="wrap_content"
18             android:text="点击获取网络图片"/>
19         <Button
20             android:id="@+id/web_btn"
21             android:layout_width="wrap_content"
22             android:layout_height="wrap_content"
23             android:text="点击获取网页数据"/>
24
25     </LinearLayout>
26
27     <ImageView
28         android:id="@+id/img_view"
29         android:adjustViewBounds="true"
30         android:layout_width="match_parent"
31         android:layout_height="wrap_content" />
32
33     <WebView
34         android:id="@+id/web_view"
35         android:layout_width="match_parent"
36         android:layout_height="wrap_content"/>
37
38 </LinearLayout>

布局显示图如下:

修改MainActivity.java文件内容:

  1 package com.app.asyncimagedemo;
  2
  3 import android.app.Activity;
  4 import android.graphics.Bitmap;
  5 import android.graphics.BitmapFactory;
  6 import android.os.Bundle;
  7
  8 import android.util.Log;
  9 import android.view.View;
 10 import android.view.Window;
 11 import android.webkit.WebView;
 12 import android.widget.Button;
 13 import android.widget.ImageView;
 14 import android.widget.Toast;
 15
 16 import com.loopj.android.http.AsyncHttpClient;
 17 import com.loopj.android.http.BinaryHttpResponseHandler;
 18 import com.loopj.android.http.TextHttpResponseHandler;
 19
 20 import org.apache.http.Header;
 21
 22 /**
 23  * http://www.cnblogs.com/clear5/
 24  */
 25 public class MainActivity extends Activity {
 26
 27     final static String TAG = MainActivity.class.getCanonicalName();
 28     //创建AsyncHttpClient对象
 29     private static AsyncHttpClient client = new AsyncHttpClient();
 30
 31     private ImageView imageView;
 32     private WebView webView;
 33     private Button imgBtn;
 34     private Button webBtn;
 35
 36     @Override
 37     protected void onCreate(Bundle savedInstanceState) {
 38         super.onCreate(savedInstanceState);
 39         requestWindowFeature(Window.FEATURE_NO_TITLE);
 40         setContentView(R.layout.activity_main);
 41
 42         //加载布局控件对象
 43         imageView = (ImageView) findViewById(R.id.img_view);
 44         imgBtn = (Button) findViewById(R.id.img_btn);
 45
 46         webView = (WebView) findViewById(R.id.web_view);
 47         webBtn = (Button) findViewById(R.id.web_btn);
 48
 49         //图片地址
 50         final String imgUrl = "http://imgsrc.baidu.com/forum/pic/item/503d269759ee3d6dc4ee119543166d224f4ade40.jpg";
 51         //网页地址
 52         final String webUrl = "http://m.cnblogs.com/?u=clear5";
 53
 54         //点击获取图片资源按钮事件
 55         imgBtn.setOnClickListener(new View.OnClickListener() {
 56             @Override
 57             public void onClick(View view) {
 58
 59                 imageView.setVisibility(View.VISIBLE);//获取图片资源时,图片资源显示
 60                 webView.setVisibility(View.GONE);//获取图片资源时,网页资源隐藏
 61
 62                 haveImg(imgUrl);
 63             }
 64         });
 65
 66         //点击获取网页资源按钮事件
 67         webBtn.setOnClickListener(new View.OnClickListener() {
 68             @Override
 69             public void onClick(View view) {
 70
 71                 imageView.setVisibility(View.GONE);//获取网页资源时,图片资源隐藏
 72                 webView.setVisibility(View.VISIBLE);//获取网页资源时,网页资源显示
 73
 74                 haveWeb(webUrl);
 75             }
 76         });
 77     }
 78     //获取网页
 79     private void haveWeb(String webUrl) {
 80
 81         client.get(webUrl, new TextHttpResponseHandler() {
 82             //获取失败
 83             @Override
 84             public void onFailure(int i, Header[] headers, String s, Throwable throwable) {
 85
 86                 Log.d(TAG,throwable+"");
 87
 88                 Toast.makeText(MainActivity.this,"对不起,读取失败……状态码为:"+i,Toast.LENGTH_LONG).show();
 89             }
 90             //获取成功
 91             @Override
 92             public void onSuccess(int i, Header[] headers, String s) {
 93
 94                 webView.getSettings().setJavaScriptEnabled(true);//是否支持动态加载js
 95                 webView.getSettings().setDefaultTextEncodingName("UTF-8");//编码方式
 96                 //以下两行代码是使网页能够自适屏
 97                 webView.getSettings().setUseWideViewPort(true);
 98                 webView.getSettings().setLoadWithOverviewMode(true);
 99
100                 webView.loadData(s,"text/html;charset=UTF-8",null);//加载网页
101             }
102         });
103     }
104
105     //获取图片
106     private void haveImg(String imgUrl) {
107
108         client.get(imgUrl, new BinaryHttpResponseHandler() {//BinaryHttpResponseHandler是用来读取二进制文件(比如图片)的
109             //成功
110             @Override
111             public void onSuccess(int i, Header[] headers, byte[] bytes) {
112
113                 Bitmap b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);//解析图片
114                 //将图片资源加载到ImageView控件中
115                 imageView.setImageBitmap(b);
116
117             }
118             //失败
119             @Override
120             public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
121
122                 Log.d(TAG,throwable+"");
123
124                 Toast.makeText(MainActivity.this,"对不起,读取失败……状态码为:"+i,Toast.LENGTH_LONG).show();
125
126             }
127         });
128     }
129
130
131 }

这样的话,我们就实现了android-async-http框架与网络交互数据的功能。当然还有一步重要的就是一定要在AndroidManifest.xml中加入获取网络权限的代码:

<uses-permission android:name="android.permission.INTERNET"/>

步骤都完成后,我们就可以运行程序看效果了。

启动界面:

点击获取图片资源按钮,获取图片加载到屏幕中:

然后再点击获取网页数据按钮,获取到网页加载到屏幕:

这样就完成了android-async-http与网络的数据交互,是不是很简单?



转载于:https://www.cnblogs.com/clear5/p/4568421.html

android-async-http框架之与网络进行数据交互相关推荐

  1. (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结

    Android项目实战(二十七):数据交互(信息编辑)填写总结 前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先 ...

  2. android-async-http框架之与服务器进行数据交互

    一 服务器准备: 本文使用Tomcat 6做服务器. 本文搭建服务器端使用MyEclipse 10. 首先准备好Tomcat 6与MyEclipse 10,并且将服务器配置到MyEclipse中,对于 ...

  3. Android 利用an框架快速实现网络请求(含下载上传文件)

    作者:Bgwan 链接:https://zhuanlan.zhihu.com/p/22573081 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架 ...

  4. Android前端通过Http协议与J2EE后端数据交互。工具eclipse、MySQL、Tomcat。通过JoSn获取数据。Android端实现对MySQL增删改查功能。

    Android:目录 HttpThread.java package com.example.saads; import java.io.BufferedReader; import java.io. ...

  5. Android项目实战(二十七):数据交互(信息编辑)填写总结

    前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先写实现过程,想要学习的同学可以看看,不需要的同学可以直接拉到最下 ...

  6. Android优秀开源框架集

    Android优秀开源框架介绍 开篇 网络请求框架 1. okhttp 2. retrofit 3. android-async-http android图表框架 4. MPAndroidChart ...

  7. ajax async:false不管用_js 网络请求框架 ajax和axios、fetch的区别

    互联网行业发展至今出现了很多技术,技术都在与时俱进的更新中,如从前的前端技术栈(html4+js+css+jquery)到现在vue+axios.随着更多优秀的框架出现,让我们从重复的基础代码编写中解 ...

  8. Android Http请求框架二:xUtils 框架网络请求

    一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址  : https://github.com/w ...

  9. 15个Android通用流行框架大全

    1. 缓存 DiskLruCache    Java实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader  一个强大的加载,缓存,展示图片的库 Pica ...

  10. 15类Android通用流行框架

    15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...

最新文章

  1. 2022THE重量级大学排名:97所内地高校上榜!
  2. 如何在python中构造时间戳参数
  3. git中的删除命令操作
  4. 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
  5. Linux系统文件压缩与备份(5)
  6. 优雅的嵌套滑动解决方式-NestedScroll
  7. mqdf matlab,mexopenCV的配置学习过程
  8. canvas-画图改进版
  9. Spring Framework 4.0 M1: WebSocket 支持
  10. 哲理故事300篇(中)
  11. cass坡度土方计算案例_南方cass几种土石方计算方法分析.doc
  12. Word也能制作座位表?掌握这个技巧安排座位不慌乱
  13. Android WebView 进价高级使用
  14. amd r7 2700u linux,锐龙r72700u相当于 r72700u相当于什么水平?
  15. Django 2.1.7 Celery 4.3.0 Periodic Tasks 周期性任务调度
  16. Detachment(数论)
  17. layui 弹出层回调获取弹出层数据
  18. 宿舍管理系统,宿舍管理、学生管理、楼宇管理、宿管管理分别有哪些内容
  19. dvwa如何打开_DVWA安装教程
  20. 手把手教你办理深圳入户办理,这些流程你都学会了吗?

热门文章

  1. [CF617E]XOR and Favorite Number/[CQOI2018]异或序列
  2. Cisco 证书查询
  3. angular中的$q服务
  4. ibatis #于 $区别
  5. Oracle 11gR2数据库使用
  6. SQL Server 2012 中 SSAS 多维数据浏览器已经废除
  7. [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
  8. Android IntentService的使用与源码解析
  9. 吴彦祖计算机系统班 百度网盘,哪位吴彦祖(来自伸手党的夸赞) 有老詹的那场g6的百度云盘录像啊?我很需要...
  10. Luogu4711「物理」平抛运动