当前位置: 代码迷 >> 综合 >> 初涉Android网络通信工具——Volley
  详细解决方案

初涉Android网络通信工具——Volley

热度:49   发布时间:2023-12-28 08:41:22.0

相关链接: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";@Overrideprotected 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>() {//处理响应@Overridepublic void onResponse(String response) {textView.setText("Response is: "+ response.substring(0,100));}},//监听响应异常new Response.ErrorListener() {//处理异常@Overridepublic 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() {@Overridepublic void onClick(View view) {//单个取消//request.cancel();//可批量取消if (queue != null){queue.cancelAll(TAG);}}});//在响应或错误响应后,停止该queuequeue.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-----";@Overrideprotected 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());// 用缓存和网络实例化RequestQueueRequestQueue 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>() {@Overridepublic void onResponse(String response) {Log.d(TAG, "onResponse: "+response.substring(0,100));}},new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError error) {Log.d(TAG, "onErrorResponse: ");}});queue.add(stringRequest);}
}

 

  相关解决方案