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 }
 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>

 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                 });

五、加载图片的方法

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 }
 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>

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 }
 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>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android机器圈

Android之Bmob移动后端云服务器

源码下载:http://download.csdn.net/download/jjhahage/10034519 PS:一般情况下,我们在写android程序的...

7959
来自专栏james大数据架构

Android中BroadcastReceiver广播

BroadCastReceiver 简介 广播接收者( BroadcastReceiver )用于接收广播 Intent ,广播 Intent 的发送是通过调用...

2155
来自专栏pangguoming

Android EditText 获得输入焦点 以及requestfocus()失效的问题

 最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的...

4226
来自专栏Android干货

Android 购物车功能的实现

4515
来自专栏Android知识点总结

2-VVI-材料设计之TabLayout下标签

945
来自专栏增长技术

BaseRecyclerViewAdapterHelper

#如何使用它? 先在 build.gradle 的 repositories 添加:

4111
来自专栏james大数据架构

Android Fragment完全解析

我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述。 但是Acti...

2149
来自专栏向治洪

android的RadioGroup讲解

这个主要是如何替换fragment的demo。效果图如下(下面的tabhost和上面的bar不属于这次的内容,这个是我做的一个应用程序框架的一部分,有需要的或者...

22510
来自专栏酷玩时刻

微信、支付宝App支付-JPay0.0.2发布JPay

对微信App支付、支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调

1174
来自专栏Android干货

浅谈SnackBar(Toast大兄弟)

1264

扫码关注云+社区

领取腾讯云代金券