Android Volley 实用总结

1. 简介

在使用Android开发的过程中,难免会用到网络请求,当下Android一个非常方便的开源控件Volley能够解决我们在开发Android应用中网络请求的工具;

2. Volley的优点

1.Volley的jar很小,100多K,非常适合集成使用;
2,非常适合进行数据量不大,但通信频繁的网络操作

3,可直接在主线程调用服务端并处理返回结果,

4,可以取消请求,容易扩展,面向接口编程

5,网络请求线程NetworkDispatcher默认开启了4个,可以优化,通过手机CPU数量

6,通过使用标准的HTTP缓存机制保持磁盘和内存响应的一致

3. Volley 的缺点

1,使用的是httpclient、HttpURLConnection
2,Android6.0不支持httpclient了,如果想支持得添加org.apache.http.legacy.jar
3,对大文件下载 Volley的表现非常糟糕
4,只支持http请求
5,图片加载性能一般

可以参考文章:手撕 Volley

4.Volley的使用步骤

volley的使用过程很简单,只需要三步,分别是:
1. 创建一个RequestQueue对象。
2. 创建一个StringRequest对象。
3. 将StringRequest对象添加到RequestQueue里面。

5,Volley实例请求网络数据

下面使用一个实例,来演示Volley的使用。该实例包含一个EditText输入URL地址,一个button发送请求命令,一个TextView展示返回的url网址信息内容;

Android studio使用Volley的build.gradle实例;
dependencies {
    compile 'com.mcxiaoke.volley:library:latest.integration'
  
}

xml布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.anana.sockettest.VolleyTestActivity">

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="11dp"
        android:text="输入网址:"/>

    <EditText
        android:id="@+id/volleyurl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView4"
        android:layout_marginTop="13dp"
        android:text="http://blog.csdn.net/guolin_blog/article/details/17482095/"
        android:layout_alignParentEnd="true"
        android:layout_alignStart="@+id/textView4"/>

    <Button
        android:id="@+id/requestvolley"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请求"
        android:layout_below="@+id/volleyurl"
        android:layout_alignParentStart="true"
        android:layout_marginTop="12dp"/>

    <TextView
        android:id="@+id/showrequestreslut"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:scrollbars="vertical"
        android:fadeScrollbars="false"
        android:scrollbarStyle="outsideOverlay"
        android:scrollbarFadeDuration="1000"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/requestvolley"
        android:text="展示结果"
        android:layout_alignParentEnd="true"/>
</RelativeLayout>
activity界面具体使用Volley请求网络数据的实现;
package com.anana.sockettest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

public class VolleyTestActivity extends AppCompatActivity
{

    private final static String TAG = "volley";
    private Button request;
    private EditText volleyUrl;
    private TextView showcontent;
    private RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_volley_test);

        requestQueue = Volley.newRequestQueue(this);
        volleyUrl = (EditText) findViewById(R.id.volleyurl);
        request = (Button) findViewById(R.id.requestvolley);
        showcontent = (TextView) findViewById(R.id.showrequestreslut);
        showcontent.setMovementMethod(ScrollingMovementMethod.getInstance());
        request.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                request();
            }
        });
    }

    private void request()
    {
        StringRequest strRequest = new StringRequest(Request.Method.GET, volleyUrl.getText()
                .toString(), new Response.Listener<String>()
        {
            @Override
            public void onResponse(final String response)
            {
                Log.e(TAG, "onResponse response:" + response);
                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        showcontent.setText(response);
                    }
                });
            }
        }, new Response.ErrorListener()
        {
            @Override
            public void onErrorResponse(final VolleyError error)
            {
                Log.e(TAG, "onResponse error:" + error);
                runOnUiThread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        showcontent.setText(error.toString());
                    }
                });
            }
        });
        strRequest.setRetryPolicy(new DefaultRetryPolicy(2500,2,1));
        requestQueue.add(strRequest);
    }
}



推荐文章:

Android Volley完全解析(一),初识Volley的基本用法

Android Volley完全解析(二),使用Volley加载网络图片

Android Volley完全解析(三),定制自己的Request

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值