一、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. Android NDK 学习之传递类对象

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  2. 暴力清除Android中的短信

    有些短信程序有bug,当短信(特别是彩信)没有接收完整,或者是一些异常情况下,你会收到一条短信但是看不到或者看不了. 此时郁闷的事情就来了,系统会提醒你还有1条未读短信,但是你满世界都找不到这条短信. ...

  3. Xcode 中关于"#"的小知识

    在代码中使用Autolayout时,大家都会使用NSDictionaryOfVariableBindings这个宏,这个宏可以生成一个变量名到变量值映射的Dictionary.比如NSDictiona ...

  4. Java知多少(下)

    Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...

  5. ActivityGroup里面装的子Activity不执行OnActivityResult()的解决办法

    转自http://blog.csdn.net/snakewarhead/article/details/7976831 tab activity 中调用startActivityForResult 以 ...

  6. JavaScript 变量生命周期

    变量在它声明时初始化. 局部变量在函数调用时创建,当函数执行完毕后销毁,这和为什么要使用闭包也有一点关系,当然这是另外的话题了. 全局变量在页面(当前页面)关闭后销毁.

  7. 剑指架构师系列-tomcat6通过IO复用实现connector

    由于tomcat6的配置文件如下: <Connector port="80" protocol="org.apache.coyote.http11.Http11Ni ...

  8. 使用命令行备份指定文件夹并保留最新N份

    客户需要对网站进行定期备份,并保留最近30天的文件,编写后以下脚本,通过Windows的任务计划进行调度 对比手工和任务计划调度运行情况来看,手工运行中可直接调用RAR.exe和网络进行传输,但是任务 ...

  9. python异常处理(基础)

    之前在学习python的时候有整理过python异常处理的文章,不够简单也不够完整,所以决定再整理一篇,算做补充. http://www.cnblogs.com/fnng/archive/2013/0 ...

  10. php的SAPI,CLI SAPI,CGI SAPI

    首先一个问题:在命令行下执行:php -r 'echo 12;' 控制台会打印出 12: 这个过程不是很奇妙么,我输入的是shell命令,但是执行的却是php脚本.php脚本执行完成之后的输出还能在控 ...