Volley网络连接
一、Volley
a burst or emission of many things or a large amount at once
Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
二、特点
异步任务下载图片的操作存在几个问题
1、 代码量大且繁琐
2、 ListView滚动太快,可能导致下载的图片无法正常显示
3、 可能浪费系统资源
4、 旋转屏幕可能导致再次下载
由此提出使用Volley替代 网络操作
但是只适合简单的网络操作:
1、 json/xml文本数据
2、 图片加载
不能用于大数据的下载 和 文件的上传
三、使用前准备
找到volley文件 (sdk版本文件下com/android/volley)
将volley文件内的内容(所有文件)复制到项目com.android.volley包下
删除类名带有Text 的测试java文件
四、下载文本数据的方法
1、StringRequest
package com.xqx.volleydemo; import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley; public class MainActivity extends Activity { //1、声明RequestQueue
private RequestQueue requestQueue;
private TextView tv_show;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url = "http://ikft.house.qq.com/index.php?guid=866500021200250&devua=appkft_1080_1920_XiaomiMI4LTE_1.8.3_Android19&order=0&searchtype=normal&devid=866500021200250&appname=QQHouse&mod=appkft&act=searchhouse&channel=71&page=1&rn=20&cityid=1";
tv_show = (TextView) findViewById(R.id.tv_show);
//2、实例化RequestQueue对象
requestQueue = Volley.newRequestQueue(this);
//下载数据,返回字符串格式的数据
StringRequest request = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//得到字符串数据response
tv_show.setText(response);
}
}, null);
//3、将请求添加到队列中
requestQueue.add(request);
} }
MainActivity.java
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> <TextView
android:layout_gravity="center"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="下载的内容"
android:id="@+id/tv_show"
/> </FrameLayout>
activity_main
2、JsonObjectRequest
JsonObjectRequest request=new JsonObjectRequest(Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// TODO 请求成功
try {
JSONArray array=response.getJSONArray("data");
parseJson(array);
} catch (JSONException e) {
e.printStackTrace();
} }
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(), "请求出错", ).show();
}
});
method
五、加载图片的方法
1、ImageRequest
package com.xqx.volleydemo; import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView; import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley; public class MainActivity extends Activity {
//1、声明RequestQueue
private RequestQueue requestQueue;
private ImageView img_show;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img_show = (ImageView) findViewById(R.id.img_show);
//2、实例化RequestQueue对象
requestQueue = Volley.newRequestQueue(this);
//加载图片
ImageRequest request = new ImageRequest("http://www.baidu.com/img/bd_logo.png",
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
//图片下载成功后回调此方法
//TODO 设置ImageView
img_show.setImageBitmap(response);
}
},
//内存中Bitmap最大的宽度,高度限制,用于降低内存的消耗
, ,
//告诉BitmapFactory 在生产Bitmap的时候一个像素包含的信息
Bitmap.Config.ARGB_8888,
//图片加载失败的时候回调
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//TODO 显示加载失败的图片
img_show.setImageResource(R.drawable.ic_launcher);
}
}
);
//3、将请求添加到队列中
requestQueue.add(request);
}
}
MainActivity.java
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> <ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/img_show"
/>
</FrameLayout>
activity_main.xml
2、ImageLoader
package com.xqx.volleydemo; import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.LruCache;
import android.widget.ImageView; import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley; public class MainActivity extends Activity { //1、声明RequestQueue
private RequestQueue requestQueue;
private ImageLoader imageloder;
private ImageView imgView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgView = (ImageView) findViewById(R.id.img_show); imageloder = new ImageLoader(requestQueue, new ImageLoader.ImageCache() { private LruCache<String,Bitmap> cache = new LruCache<>(); @Override
public Bitmap getBitmap(String url) { return cache.get(url);
} @Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
});
imageloder.get("http://www.baidu.com/img/bd_logo.png"
, ImageLoader.getImageListener(imgView,R.drawable.ic_launcher,
android.R.drawable.ic_media_pause));
} }
MainActivity.java
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
> <ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/img_show"
/>
</FrameLayout>
activity_main.xml
Volley网络连接的更多相关文章
- Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比
比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有 ...
- 谷歌Volley网络框架讲解——BasicNetwork类
谷歌Volley网络框架讲解——BasicNetwork类 这个类是toolbox工具箱包里的,实现了Network接口. 先来看下Network这个interface,performRequest( ...
- Volley网络框架完全解析(缓存篇)
在上一篇中讲完了Volley框架怎么使用,那么这篇就来讲讲Volley框架的缓存机制 我们看Volley内部源码发现: Volley框架内部自己处理了DiskBasedCache硬盘缓存,但是没有处理 ...
- VMware的三种网络连接方式区别
关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...
- Win10搭建Linux开发环境之网络连接设定
一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...
- 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式
VMware虚拟机的网络连接方式分为三种:桥接模式.NAT模式.仅主机(Host Only) (1)桥接模式 桥接模式即在虚拟机中虚拟一块网卡,这样主机和虚拟机在一个网段中就被看作是两个独立的IP地址 ...
- 网络连接详细信息出现两个自动配置ipv4地址
问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)
时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是 ...
- VMware Workstation中网络连接之桥接、NAT和Host-only
在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...
随机推荐
- 经典SQL语句大全(网络资源共享)
下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELET ...
- 让我们一起Go(十二)
前言: 上篇中,我们讲到了在Go语言中如何定义方法,今天,我们将进一步深入Go语言的面向对象编程. 一.Go语言中的接口 首先来看一个最基本的接口: 和定义一个结构体类似,只不过将struct换成了i ...
- 将main方法打成jar包,并引用第三方的maven jar包
一.准备工作.执行命令 学习插件: 学习apache的打包插件maven-assembly-plugin:http://maven.apache.org/plugins/maven-assembly- ...
- HIVE: Map Join Vs Common Join, and SMB
HIVE Map Join is nothing but the extended version of Hash Join of SQL Server - just extending Hash ...
- linux 硬盘分区,分区,删除分区,格式化,挂载,卸载笔记
linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1, 创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没 ...
- Apache+tomcat+mod_jk+centos6.2负载均衡集群配置--转载
转载地址:http://blog.163.com/chenhui_java/blog/static/17267249420128101191860/ 注: 由于长期受转载毒害,所以本人日志均是原创:其 ...
- Web Service常识
1 问题的引出 位于服务器的程序需要在Web页面上显示一个订单列表,它需要访问业务对象服务器上的程序,通过它读取订单列表,业务对象服务器又要访问数据库服务器.当一台计算机上的程序调用另一台计算机上 ...
- TCP/IP协议(一)
TCP/IP是Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协 ...
- NVelocity的基本用法
NVelocity常用语法指令 默认情况下,NVelocity解析是不分大小写的,当然可以通过设置runtime.strict.math=true,采用严格解析模式. 严格区分大小写有时候还是挺有用途 ...
- MySqlConnection 并发连接的问题
最近在做项目的过程中遇到一个MySql在并发时初始化的问题,场景是这样子的: 我在Job中设定在同一时间点启动多个操作来访问数据库更新数据,结果在创建连接的时候抛出下面的问题: Note that w ...