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

 1 package com.xqx.volleydemo;
 2
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.TextView;
 6
 7 import com.android.volley.RequestQueue;
 8 import com.android.volley.Response;
 9 import com.android.volley.toolbox.JsonArrayRequest;
10 import com.android.volley.toolbox.StringRequest;
11 import com.android.volley.toolbox.Volley;
12
13 public class MainActivity extends Activity {
14
15     //1、声明RequestQueue
16     private RequestQueue requestQueue;
17     private TextView tv_show;
18     @Override
19     public void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         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";
23         tv_show = (TextView) findViewById(R.id.tv_show);
24         //2、实例化RequestQueue对象
25         requestQueue = Volley.newRequestQueue(this);
26         //下载数据,返回字符串格式的数据
27         StringRequest request = new StringRequest(url, new Response.Listener<String>() {
28             @Override
29             public void onResponse(String response) {
30                 //得到字符串数据response
31                 tv_show.setText(response);
32             }
33         }, null);
34         //3、将请求添加到队列中
35         requestQueue.add(request);
36     }
37
38 }

MainActivity.java

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:orientation="vertical"
 4               android:layout_width="fill_parent"
 5               android:layout_height="fill_parent"
 6         >
 7
 8     <TextView
 9             android:layout_gravity="center"
10             android:gravity="center"
11             android:layout_width="fill_parent"
12             android:layout_height="wrap_content"
13             android:text="下载的内容"
14             android:id="@+id/tv_show"
15             />
16
17
18 </FrameLayout>

activity_main

2、JsonObjectRequest

 1 JsonObjectRequest request=new JsonObjectRequest(Method.GET, url, null,
 2                 new Response.Listener<JSONObject>() {
 3                     @Override
 4                     public void onResponse(JSONObject response) {
 5                         // TODO 请求成功
 6                         try {
 7                             JSONArray array=response.getJSONArray("data");
 8                             parseJson(array);
 9                         } catch (JSONException e) {
10                             e.printStackTrace();
11                         }
12
13                     }
14                 }, new Response.ErrorListener() {
15                     @Override
16                     public void onErrorResponse(VolleyError error) {
17                         // TODO Auto-generated method stub
18                         Toast.makeText(getApplicationContext(), "请求出错", 0).show();
19                     }
20                 });

method

五、加载图片的方法

1、ImageRequest

 1 package com.xqx.volleydemo;
 2
 3 import android.app.Activity;
 4 import android.graphics.Bitmap;
 5 import android.os.Bundle;
 6 import android.widget.ImageView;
 7
 8 import com.android.volley.RequestQueue;
 9 import com.android.volley.Response;
10 import com.android.volley.VolleyError;
11 import com.android.volley.toolbox.ImageRequest;
12 import com.android.volley.toolbox.Volley;
13
14 public class MainActivity extends Activity {
15     //1、声明RequestQueue
16     private RequestQueue requestQueue;
17     private ImageView img_show;
18     @Override
19     public void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         img_show = (ImageView) findViewById(R.id.img_show);
23         //2、实例化RequestQueue对象
24         requestQueue = Volley.newRequestQueue(this);
25         //加载图片
26         ImageRequest request = new ImageRequest("http://www.baidu.com/img/bd_logo.png",
27                 new Response.Listener<Bitmap>() {
28                     @Override
29                     public void onResponse(Bitmap response) {
30                     //图片下载成功后回调此方法
31                         //TODO 设置ImageView
32                         img_show.setImageBitmap(response);
33                     }
34                 },
35                 //内存中Bitmap最大的宽度,高度限制,用于降低内存的消耗
36                 128, 64,
37                 //告诉BitmapFactory 在生产Bitmap的时候一个像素包含的信息
38                 Bitmap.Config.ARGB_8888,
39                 //图片加载失败的时候回调
40                 new Response.ErrorListener() {
41                     @Override
42                     public void onErrorResponse(VolleyError error) {
43                         //TODO 显示加载失败的图片
44                         img_show.setImageResource(R.drawable.ic_launcher);
45                     }
46                 }
47         );
48         //3、将请求添加到队列中
49         requestQueue.add(request);
50     }
51 }

MainActivity.java

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:orientation="vertical"
 4               android:layout_width="fill_parent"
 5               android:layout_height="fill_parent"
 6         >
 7
 8
 9     <ImageView
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         android:id="@+id/img_show"
13         />
14 </FrameLayout>

activity_main.xml

2、ImageLoader

 1 package com.xqx.volleydemo;
 2
 3 import android.app.Activity;
 4 import android.graphics.Bitmap;
 5 import android.os.Bundle;
 6 import android.util.LruCache;
 7 import android.widget.ImageView;
 8
 9 import com.android.volley.RequestQueue;
10 import com.android.volley.toolbox.ImageLoader;
11 import com.android.volley.toolbox.Volley;
12
13 public class MainActivity extends Activity {
14
15     //1、声明RequestQueue
16     private RequestQueue requestQueue;
17     private ImageLoader imageloder;
18     private ImageView imgView;
19     @Override
20     public void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23         imgView = (ImageView) findViewById(R.id.img_show);
24
25
26         imageloder = new ImageLoader(requestQueue, new ImageLoader.ImageCache() {
27
28             private LruCache<String,Bitmap> cache = new LruCache<>(10);
29
30             @Override
31             public Bitmap getBitmap(String url) {
32
33                 return cache.get(url);
34             }
35
36             @Override
37             public void putBitmap(String url, Bitmap bitmap) {
38                 cache.put(url,bitmap);
39             }
40         });
41         imageloder.get("http://www.baidu.com/img/bd_logo.png"
42                 , ImageLoader.getImageListener(imgView,R.drawable.ic_launcher,
43                 android.R.drawable.ic_media_pause));
44     }
45
46 }

MainActivity.java

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3               android:orientation="vertical"
 4               android:layout_width="fill_parent"
 5               android:layout_height="fill_parent"
 6         >
 7
 8
 9     <ImageView
10         android:layout_width="match_parent"
11         android:layout_height="match_parent"
12         android:id="@+id/img_show"
13         />
14 </FrameLayout>

activity_main.xml

时间: 2024-11-01 03:28:08

Volley网络连接的相关文章

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

比较的指标: 1.cpu 2.流量 3.电量 4.内存占用 5.联网时间 功能点: 1.重试机制 2.提供的扩展功能 3.易用性 4.是否https 5.是否支持reflect api,OkHttp有配套方法 6.缓存.重试 7.cookie支持session  id会话支持 8.弱网性能和稳定性 9.超时时间,几种超时时间   连接超时,响应超时 10.适配各种机型.4.4和之前版本  2.3  4.1 5.0 4种网络连接方式提供的功能对比表格: 缓存 重试 Https/Http 稳定性 C

Android使用Google推荐的联网框架Volley,让连接网络更加简单

大家好,随着技术的进步,科技的发达,很少有应用是单机的了,大部分都需要联网访问服务器,以前我们都用 httpclient和httpurlconnection,感觉是不是非常麻烦,而Google特别为开发者考虑,推出了Volley,从此妈妈再也不担心我的联网问题了,哪里联不上联哪里,Volley让联网更容易和更快,并且Volley请求会异步执行,不阻挡主线程联网请求无非就是Get或者Post,我们很少用到DELETE这个请求方式,说了这么多废话,下面让我们看看Volley到底能干啥.它真的有这么神

Android官方开发文档Training系列课程中文版:网络操作之网络连接

原文地址:http://android.xsoftlab.net/training/basics/network-ops/index.html 引言 这节课将会学习最基本的网络连接,监视网络连接状况及网络控制等内容.除此之外还会附带描述如何解析.使用XML数据. 这节课所包含的示例代码演示了最基本的网络操作过程.开发者可以将这部分的代码作为应用程序最基本的网络操作代码. 通过这节课的学习,将会学到最基本的网络下载及数据解析的相关知识. Note: 可以查看课程Transmitting Netwo

android 7种网络连接方式《IT蓝豹》

本项目由作者 王永飞 精心为初学者准备的学习项目.android 几种网络连接方式,本项目适合初学者学习网络知识.项目中用到一下几种网络请求方式:(1):HttpClient  方式获取网络数据 (2) : HttpURLConnection 使用原始方式获取数据(3): Volley 方式实现图片加载(4):XUtil方式获取网络(5):ImageLoader 方式加载图片(6):OkHttp 方式获取网络请求 运行效果: 效果源码::http://www.itlanbao.com/code/

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

在上一篇中讲完了Volley框架怎么使用,那么这篇就来讲讲Volley框架的缓存机制 我们看Volley内部源码发现: Volley框架内部自己处理了DiskBasedCache硬盘缓存,但是没有处理LruCache内存缓存,因为一般在处理图片的问题上才更多的用到LruCache缓存,但是它提供了一个ImageCache接口供我们自己实现,该接口默认需要实现两个方法:getBitmap(String key)和putBitmap(String key, Bitmap bitmap),由此可见,这

《IT蓝豹》android 7种网络连接方式

本项目由作者 王永飞 精心为初学者准备的学习项目.android 几种网络连接方式,本项目适合初学者学习网络知识.项目中用到一下几种网络请求方式:(1):HttpClient  方式获取网络数据 (2) : HttpURLConnection 使用原始方式获取数据(3): Volley 方式实现图片加载(4):XUtil方式获取网络(5):ImageLoader 方式加载图片(6):OkHttp 方式获取网络请求 运行效果: 效果源码:http://www.itlanbao.com/code/2

VMware网络连接模式说明及故障排查

一.VMware网络连接模式-桥接.NAT以及仅主机模式的详细介绍和区别 VMware 桥接模式 VMware桥接模式,也就是将虚拟机的虚拟网络适配器与主机的物理网络适配器进行交接,虚拟机中的虚拟网络适配器可通过主机中的物理网络适配器直接访问到外部网络(例如图中所示的局域网和Internet,下同).简而言之,这就好像在上图所示的局域网中添加了一台新的.独立的计算机一样.因此,虚拟机也会占用局域网中的一个IP地址,并且可以和其他终端进行相互访问.桥接模式网络连接支持有线和无线主机网络适配器.如果

物理真实网络连接和虚拟机联网的方式详解

物理真实网络连接和虚拟机联网的方式详解 一.物理真实网络连接图详解 二.查找VMware指定虚拟IP: 1. 2. 3. 三.注意:Linux虚拟网络连接有以下几种: 1.NAT方式(这种方式CentOS可以上外网) 2.桥接方式(bridging)(这种方式CentOS可以上外网) 3.hostonly方式(注意:这种方式CentOS不可以上外网) 四.虚拟机的IP在window上ping下,看能不能拼的通,如果拼的通,说明linux上可以上外网 1.查看linux下ip 2.在window上

android 网络连接 wifi gprs的连接

package com.example.androidday15_network1; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.os.Bundle; import andr