Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Android Volley 是Google开发的一个网络lib,可以让你更加简单并且快速的访问网络数据。Volley库的网络请求都是异步的,你不必担心异步处理问题。
Volley的优点:

  • 请求队列和请求优先级
  • 请求Cache和内存管理
  • 扩展性性强
  • 可以取消请求

下载和编译volley.jar
需要安装git,ant,android sdk
clone代码

git clone https://android.googlesource.com/platform/frameworks/volley

编译jar:

android update project -p . ant jar

添加volley.jar到你的项目中
不过已经有人将volley的代码放到github上了:
https://github.com/mcxiaoke/android-volley,你可以使用更加简单的方式来使用volley:
Maven
format: jar

<dependency>
  <groupId>com.mcxiaoke.volley</groupId>
  <artifactId>library</artifactId>
  <version>1.0.6</version>
</dependency>

Gradle
format: jar

compile 'com.mcxiaoke.volley:library:1.0.6'

Volley工作原理图

Android开发中使用Volley库发送HTTP请求的实例教程

创建Volley 单例
使用volley时,必须要创建一个请求队列requestQueue,使用请求队列的最佳方式就是将它做成一个单例,整个app使用这么一个请求队列。

public class AppController extends Application {

public static final String TAG = AppController.class
    .getSimplename();

private requestQueue mrequestQueue;
private ImageLoader mImageLoader;

private static AppController mInstance;

@Override
public void onCreate() {
  super.onCreate();
  mInstance = this;
}

public static synchronized AppController geTinstance() {
  return mInstance;
}

public requestQueue getrequestQueue() {
  if (mrequestQueue == null) {
    mrequestQueue = Volley.newrequestQueue(getApplicationContext());
  }

  return mrequestQueue;
}

public ImageLoader getImageLoader() {
  getrequestQueue();
  if (mImageLoader == null) {
    mImageLoader = new ImageLoader(this.mrequestQueue,new LruBitmapCache());
  }
  return this.mImageLoader;
}

public <T> void addTorequestQueue(request<T> req,String tag) {
  // set the default tag if tag is empty
  req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
  getrequestQueue().add(req);
}

public <T> void addTorequestQueue(request<T> req) {
  req.setTag(tag);
  getrequestQueue().add(req);
}

public void cancelPendingrequests(Object tag) {
  if (mrequestQueue != null) {
    mrequestQueue.cancelAll(tag);
  }
}
}

另外,你还需要一个Cache来存放请求的图片

public class LruBitmapCache extends LruCache<String,Bitmap> implement ImageCache {
  public static int getDefaultLruCacheSize() {
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    return cacheSize;
  }

  public LruBitmapCache() {
    this(getDefaultLruCacheSize());
  }

  public LruBitmapCache(int sizeInKiloBytes) {
    super(sizeInKiloBytes);
  }

  @Override
  protected int sizeOf(String key,Bitmap value) {
    return value.getRowBytes() * value.getHeight() / 1024;
  }

  @Override
  public Bitmap getBitmap(String url) {
    return get(url);
  }

  @Override
  public void putBitmap(String url,Bitmap bitmap) {
    put(url,bitmap);
  }
}

别忘记在AndroidManifest.xml文件添加android.permission.INTERNET权限。

http请求实例

  private Context mContext;
  private requestQueue mrequestQueue;
  private Stringrequest mStringrequest;

  // 利用Volley实现Post请求
  private void volley_post() {
    String url = "http://aplesson.com/wap/api/user.PHP?action=login";
    mContext = this;
    mrequestQueue = Volley.newrequestQueue(mContext);
    mStringrequest = new Stringrequest(Method.POST,url,new Response.Listener<String>() {
          @Override
          public void onResponse(String responsE) {
            System.out.println("请求结果:" + responsE);
          }
        },new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("请求错误:" + error.toString());
          }
        }) {
      // 携带参数
      @Override
      protected HashMap<String,String> getParams()
          throws AuthFailureError {
        HashMap<String,String> hashMap = new HashMap<String,String>();
        hashMap.put("un","852041173");
        hashMap.put("pw","852041173abc");
        return hashMap;
      }

      // Volley请求类提供了一个 getHeaders()的方法,重载这个方法可以自定义http 的头信息。(也可不实现)
      public Map<String,String> getHeaders() throws AuthFailureError {
        HashMap<String,String> headers = new HashMap<String,String>();
        headers.put("Accept","application/json");
        headers.put("Content-Type","application/json; charset=UTF-8");
        return headers;
      }

    };

    mrequestQueue.add(mStringrequest);

  }

  private JsonObjectrequest mJsonObjectrequest;

  // 利用Volley实现Json数据请求
  private void volley_json() {
    mContext = this;
    String url = "http://aplesson.com/data/101010100.html";
    // 1 创建requestQueue对象
    mrequestQueue = Volley.newrequestQueue(mContext);
    // 2 创建JsonObjectrequest对象
    mJsonObjectrequest = new JsonObjectrequest(url,null,new Response.Listener<JSONObject>() {
          @Override
          public void onResponse(JSONObject responsE) {
            System.out.println("请求结果:" + response.toString());
          }
        },new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("请求错误:" + error.toString());
          }
        });

    // 3 将JsonObjectrequest添加requestQueue
    mrequestQueue.add(mJsonObjectrequest);

  }

  // 利用Volley实现Get请求
  private void volley_get() {
    mContext = this;
    String url = "http://www.aplesson.com/";
    // 1 创建requestQueue对象
    mrequestQueue = Volley.newrequestQueue(mContext);
    // 2 创建Stringrequest对象
    mStringrequest = new Stringrequest(url,new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
            System.out.println("请求错误:" + error.toString());
          }
        });
    // 3 将Stringrequest添加requestQueue
    mrequestQueue.add(mStringrequest);
  }


Volley提供了JsonObjectrequest、JsonArrayrequest、Stringrequest等request形式。JsonObjectrequest:返回JSON对象。
JsonArrayrequest:返回JsonArray。
Stringrequest:返回String,这样可以自己处理数据,更加灵活。
另外可以继承request<T>自定义request。

取消request
Activity里面启动了网络请求,而在这个网络请求还没返回结果的时候,Activity被结束了,此时如果继续使用其中的Context等,除了无辜的浪费cpu,电池,网络等资源,有可能还会导致程序crash,所以,我们需要处理这种一场情况。使用Volley的话,我们可以在Activity停止的时候,同时取消所有或部分未完成的网络请求。Volley里所有的请求结果会返回给主进程,如果在主进程里取消了某些请求,则这些请求将不会被返回给主线程。Volley支持多种request取消方式。
可以针对某些个request做取消操作:

 @Override
  public void onStop() {
    for (request <?> req : mrequestQueuE) {
      req.cancel();
    }
  }

取消这个队列里的所有请求:

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    mrequestQueue.cancelAll(this);
  }

可以根据requestFilter或者Tag来终止某些请求

 @Override
  protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();

    mrequestQueue.cancelAll( new requestFilter() {});
    or
    mrequestQueue.cancelAll(new Object());
  }

Volley支持http的GET、POST、PUT、deletE等方法


大佬总结

以上是大佬教程为你收集整理的Android开发中使用Volley库发送HTTP请求的实例教程全部内容,希望文章能够帮你解决Android开发中使用Volley库发送HTTP请求的实例教程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: