相关链接:andorid官网-Volley
基本概念
Volley 是一个用于 Android 应用进行网络请求的框架 (类库)。
利用Volley访问网络更轻松、更快捷,但Volley不适用于下载大量内容的操作或流式传输操作,因为在解析过程中,Volley 会将所有响应存储在内存中。对于下载大量内容的操作,请考虑使用 DownloadManager
等替代方法。
使用Volley,需要引库
dependencies {
...
implementation 'com.android.volley:volley:1.1.1'
}
Android应用需要使用网络,必须在manifest中申明权限
<uses-permission android:name="android.permission.INTERNET"/>
例1:采用默认的 RequestQueue
package com.clc.app34;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
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 MainActivity extends AppCompatActivity {
private String TAG = "picReq";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.text);
String url ="https://www.google.com";
final StringRequest request = new StringRequest(
Request.Method.GET,//请求方式
url,//访问地址
//监听响应
new Response.Listener<String>() {
//处理响应
@Override
public void onResponse(String response) {
textView.setText("Response is: "+ response.substring(0,100));
}
},
//监听响应异常
new Response.ErrorListener() {
//处理异常
@Override
public void onErrorResponse(VolleyError error) {
textView.setText("That didn't work!");
}
});
request.setTag(TAG);
// Volley.newRequestQueue(this)用于创建默认的RequestQueue对象,并启动该队列(自动)
final RequestQueue queue = Volley.newRequestQueue(this);
queue.add(request);
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//单个取消
//request.cancel();
//可批量取消
if (queue != null){
queue.cancelAll(TAG);
}
}
});
//在响应或错误响应后,停止该queue
queue.stop();
}
}
例2:采用可设置的 RequestQueue
package com.clc.app34;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.android.volley.Cache;
import com.android.volley.Network;
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.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.StringRequest;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity-----";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//缓存设置
Cache cache = new DiskBasedCache(getCacheDir(), 1024 * 1024); // 1MB cap
//网络设置
Network network = new BasicNetwork(new HurlStack());
// 用缓存和网络实例化RequestQueue
RequestQueue queue = new RequestQueue(cache, network);
// 手动启动
queue.start();
String url ="https://www.baidu.com";
StringRequest stringRequest = new StringRequest(
Request.Method.GET,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, "onResponse: "+response.substring(0,100));
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "onErrorResponse: ");
}
});
queue.add(stringRequest);
}
}