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里面。
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的基本用法