一、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网络连接的更多相关文章

  1. Android4种网络连接方式HttpClient、HttpURLConnection、OKHttp和Volley优缺点和性能对比

    比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有 ...

  2. 谷歌Volley网络框架讲解——BasicNetwork类

    谷歌Volley网络框架讲解——BasicNetwork类 这个类是toolbox工具箱包里的,实现了Network接口. 先来看下Network这个interface,performRequest( ...

  3. Volley网络框架完全解析(缓存篇)

    在上一篇中讲完了Volley框架怎么使用,那么这篇就来讲讲Volley框架的缓存机制 我们看Volley内部源码发现: Volley框架内部自己处理了DiskBasedCache硬盘缓存,但是没有处理 ...

  4. VMware的三种网络连接方式区别

    关于VMware的三种网络连接方式,NAT,Bridged,Host-Only ,在刚接触的时候通常会遇到主机Ping不通虚拟机而虚拟机能Ping得通主机:主机与虚拟机互不相通等等网络问题.本文就这三 ...

  5. Win10搭建Linux开发环境之网络连接设定

    一直想在家自己搭建一个LINUX服务器,好在上面安装个ORACLE数据库玩玩. 上次用了Ubuntu,结果ORACLE没装成功,现在换个思路,采用CentOS 7作为Linux服务器, 之后再进行构建 ...

  6. 【虚拟机】在VMware中安装Server2008之后配置网络连接的几种方式

    VMware虚拟机的网络连接方式分为三种:桥接模式.NAT模式.仅主机(Host Only) (1)桥接模式 桥接模式即在虚拟机中虚拟一块网卡,这样主机和虚拟机在一个网段中就被看作是两个独立的IP地址 ...

  7. 网络连接详细信息出现两个自动配置ipv4地址

    问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...

  8. MMORPG大型游戏设计与开发(服务器 游戏场景 掉落与网络连接)

    时间一点点的消逝,伴着自己空闲日子将要结束的时候我尽量的学习和分享场景和AI的知识给朋友们,不过很遗憾的是这些文章还有不足的地方,就是有的难点没有完全的分析到.掉落在游戏中必不可少的,同时网络连接也是 ...

  9. VMware Workstation中网络连接之桥接、NAT和Host-only

    在Windows XP系统中,安装好VMware Workstation虚拟机软件以后,我们可以查看一下"网络连接"窗口: 在窗口中多出了两块网卡: VMware Network ...

随机推荐

  1. [转]C# 文本框只能输入数字

    调用TextBox的KeyPress事件 private void txtUserId_KeyPress(object sender, KeyPressEventArgs e){ //如果输入的不是数 ...

  2. windows 2008 R2 64位系统,找到Microsoft Excel 应用程序

    在windows  2003 操作系统中, 1.在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务", 2.依次双击& ...

  3. iOS开发中一些常见的并行处理(转)

    本文主要探讨一些常用多任务的最佳实践.包括Core Data的多线程访问,UI的并行绘制,异步网络请求以及一些在运行态内存吃紧的情况下处理大文件的方案等.

其实编写异步处理的程序有很多坑!所以,本文 ...

  4. Eclipse卸载插件

    Eclipse卸载插件 ### 本人Eclipse版本为:Eclipse Mars 1. 选择: Help -> Install New Software , 如下图:2. 点击 what is ...

  5. 解决rspec 生成报告时报utf-8错误的方法

    找到gems\1.9.1\gems\rspec-core-2.14.3\lib\rspec\core\formatters\snippet_extractor.rb文件中的第27行: 在这边记录一下, ...

  6. jquery getJSON

    function onNodeClick(data) {            //只能选择体检分组            if (data.GroupType == 1) {             ...

  7. 【转载】debian上快速搭建ftp

    转载自:http://suifengpiaoshi.diandian.com/post/2012-05-05/17955899 搭建ftp 包括搭建ftp服务器和ftp客户端 本文以debian上搭建 ...

  8. .NET通用开发框架

    在开源中国社区,简单整理了下比较好的.NET通用开发框架.一个好的通用框架大概包括:开源.扩展性好.灵活性好.复用性好.维护性好.易测试.易发布.易部署.快速业务搭建(或业务集成).通用性强.参考资料 ...

  9. Network - 对比net-tools与iproute2

    net-tools VS iproute2 net-tools与iproute2大比较

  10. GoodsAndStaffManagermentSystem----Sprint 计划1

    需求分析:茗仕茶业管理系统是个商品-员工综合管理系统. 员工管理:设置不同的职位,不同职位有不同访问权限.员工只能卖商品,财务员只有查看商品的库存量和商品销售记录:公司老板可以查看所有信息--    ...