android-async-http框架之与网络进行数据交互
(尊重劳动成果,转载请注明出处,谢谢。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框架之与网络进行数据交互相关推荐
- (转载)Android项目实战(二十七):数据交互(信息编辑)填写总结
Android项目实战(二十七):数据交互(信息编辑)填写总结 前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先 ...
- android-async-http框架之与服务器进行数据交互
一 服务器准备: 本文使用Tomcat 6做服务器. 本文搭建服务器端使用MyEclipse 10. 首先准备好Tomcat 6与MyEclipse 10,并且将服务器配置到MyEclipse中,对于 ...
- Android 利用an框架快速实现网络请求(含下载上传文件)
作者:Bgwan 链接:https://zhuanlan.zhihu.com/p/22573081 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. an框架的网络框架 ...
- Android前端通过Http协议与J2EE后端数据交互。工具eclipse、MySQL、Tomcat。通过JoSn获取数据。Android端实现对MySQL增删改查功能。
Android:目录 HttpThread.java package com.example.saads; import java.io.BufferedReader; import java.io. ...
- Android项目实战(二十七):数据交互(信息编辑)填写总结
前言: 项目中必定用到的数据填写需求.比如修改用户名的文字编辑对话框,修改生日的日期选择对话框等等.现总结一下,方便以后使用. 注: 先写实现过程,想要学习的同学可以看看,不需要的同学可以直接拉到最下 ...
- Android优秀开源框架集
Android优秀开源框架介绍 开篇 网络请求框架 1. okhttp 2. retrofit 3. android-async-http android图表框架 4. MPAndroidChart ...
- ajax async:false不管用_js 网络请求框架 ajax和axios、fetch的区别
互联网行业发展至今出现了很多技术,技术都在与时俱进的更新中,如从前的前端技术栈(html4+js+css+jquery)到现在vue+axios.随着更多优秀的框架出现,让我们从重复的基础代码编写中解 ...
- Android Http请求框架二:xUtils 框架网络请求
一:对Http不了解的请看 Android Http请求框架一:Get 和 Post 请求 二.正文 1.xUtils 下载地址 github 下载地址 : https://github.com/w ...
- 15个Android通用流行框架大全
1. 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader 一个强大的加载,缓存,展示图片的库 Pica ...
- 15类Android通用流行框架
15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...
最新文章
- 2022THE重量级大学排名:97所内地高校上榜!
- 如何在python中构造时间戳参数
- git中的删除命令操作
- 设计一算法查找链表的中间结点。要求该算法的时间复杂度为O(n),空间复杂度为O(1)
- Linux系统文件压缩与备份(5)
- 优雅的嵌套滑动解决方式-NestedScroll
- mqdf matlab,mexopenCV的配置学习过程
- canvas-画图改进版
- Spring Framework 4.0 M1: WebSocket 支持
- 哲理故事300篇(中)
- cass坡度土方计算案例_南方cass几种土石方计算方法分析.doc
- Word也能制作座位表?掌握这个技巧安排座位不慌乱
- Android WebView 进价高级使用
- amd r7 2700u linux,锐龙r72700u相当于 r72700u相当于什么水平?
- Django 2.1.7 Celery 4.3.0 Periodic Tasks 周期性任务调度
- Detachment(数论)
- layui 弹出层回调获取弹出层数据
- 宿舍管理系统,宿舍管理、学生管理、楼宇管理、宿管管理分别有哪些内容
- dvwa如何打开_DVWA安装教程
- 手把手教你办理深圳入户办理,这些流程你都学会了吗?
热门文章
- [CF617E]XOR and Favorite Number/[CQOI2018]异或序列
- Cisco 证书查询
- angular中的$q服务
- ibatis #于 $区别
- Oracle 11gR2数据库使用
- SQL Server 2012 中 SSAS 多维数据浏览器已经废除
- [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
- Android IntentService的使用与源码解析
- 吴彦祖计算机系统班 百度网盘,哪位吴彦祖(来自伸手党的夸赞)
有老詹的那场g6的百度云盘录像啊?我很需要...
- Luogu4711「物理」平抛运动