• Android使用Google推荐的联网框架Volley,让连接网络更加简单


    大家好。随着技术的进步。科技的发达,非常少有应用是单机的了,大部分都须要联网訪问server,曾经我们都用
    httpclient和httpurlconnection,感觉是不是非常麻烦,而Google特别为开发人员考虑。推出了Volley。从此妈妈再也不操心我的联网问题了,哪里联不上联哪里,Volley让联网更easy和更快。而且Volley请求会异步运行。不阻挡主线程联网请求无非就是Get或者Post,我们非常少用到DELETE这个请求方式,说了这么多废话。以下让我们看看Volley究竟能干啥。它真的有这么奇妙吗,芝麻开门。让我们一起来探索Volley 吧!

    一:Volley提供的功能

    1、封装了的异步的RESTful 请求API;

    2、一个优雅和稳健的请求队列;

    3、一个可扩展的架构。它使开发者可以实现自己定义的请求和响应处理机制;

    4、可以使用外部HTTP Client库;

    5、缓存策略;

    6、自己定义的网络图像载入视图(NetworkImageView。ImageLoader等);

    二:为什么使用异步HTTP请求?
    Android中要求HTTP请求异步运行,假设在主线程运行HTTP请求,可能会抛出android.os.NetworkOnMainThreadException  异常。堵塞主线程有一些严重的后果。它阻碍UI渲染,用户体验不流畅,它可能会导致可怕的ANR(Application Not Responding)。要避免这些陷阱,作为一个开发人员,应该始终确保HTTP请求是在一个不同的线程。
    三:正文Volley的Get和Post方法
    首先我们要使用Volley要把Volley.jar导入我们的项目中。如图:

    这样我们就能够使了,让我们来看看Get和Post代码,例如以下:
    package com.zqy.myvolley;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import com.android.volley.AuthFailureError;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.Response;
    import com.android.volley.VolleyError;
    import com.android.volley.Request.Method;
    import com.android.volley.Response.ErrorListener;
    import com.android.volley.Response.Listener;
    import com.android.volley.toolbox.StringRequest;
    import com.android.volley.toolbox.Volley;
    
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    import android.app.Activity;
    
    public class MainActivity extends Activity implements OnClickListener {
    	private RequestQueue mQueue;
    	String url="http://www.baidu.com";
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		mQueue=Volley.newRequestQueue(this);<span style="color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; line-height: 28px;">创建一个RequestQueue对象。

    </span> initView(); } private void initView(){ final Button btnGet=(Button) findViewById(R.id.btn_get); final Button btnPost=(Button) findViewById(R.id.btn_post); btnGet.setOnClickListener(this); btnPost.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_get: initGet(); break; case R.id.btn_post: initPost(); break; default: break; } } private void initGet(){//Get请求 Method为GET mQueue.add(new StringRequest(Method.GET,url, new Listener<String>() { @Override public void onResponse(String arg0) { Toast.makeText(MainActivity.this, "Get请求成功", 2).show(); //成功,在这里写处理内容的代码 } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(MainActivity.this, "Get请求失败", 2).show(); //失败 } })); } private void initPost(){//Post请求 //这写你自己的内部类PostResquest。。。。

    Method改成POST mQueue.add(new PostResquest(Method.POST,url, new Listener<String>() { @Override public void onResponse(String arg0) { Toast.makeText(MainActivity.this, "Post请求成功", 2).show(); //成功,在这里写处理内容的代码 } }, new ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { Toast.makeText(MainActivity.this, "Post请求失败", 2).show(); //失败 } })); } //写个内部类。Post里面放一些server须要的參数 class PostResquest extends StringRequest { public PostResquest(int method, String url, Listener<String> listener, ErrorListener errorListener) { super(method, url, listener, errorListener); } protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put("Name", "小源");//參数 params.put("Age",22+"");//參数 return params; } } }

    这就是联网的代码了,是不是特别简单,比httpclient和httpurlconnection简单非常多,而且还是异步运行,根本无需Handler。让我们开发更便捷,更简单,更高效,在让我们看看XML里面的布局。里面我放了两个Button,一个运行Get方法,一个运行Post方法。例如以下:
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <Button
            android:id="@+id/btn_get"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="28dp"
            android:text="Get请求" />
    
        <Button
            android:id="@+id/btn_post"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/btn_get"
            android:layout_below="@+id/btn_get"
            android:layout_marginTop="47dp"
            android:text="Post请求" />
    
    </RelativeLayout>
    OK.大功告成,是不是感觉非常easy。看完这些代码,你是不是也打算跟httpclient和httpurlconnection say goodbye了跟Volley say hello那。最后祝愿安卓系统越做越好,让我们Android必胜宝刀行走在科技的世界里吧。Yeah~~~~
    让我们看看效果图。附Volley宣传图片一张!Go Go,回家,外面要下雨了!

    对了,差点忘了。千万不要了加联网的权限。要不会报错的!

    <uses-permission android:name="android.permission.INTERNET" >


    咦。Post怎么请求失败了。在手机上是成功的,我參数是瞎拼的。正好做个反面失败的案列,真是天助我也啊!
    真走了。下雨了!







  • 相关阅读:
    Java 在线/离线 文档
    Java集合框架全解
    【LeetCode】204.计数质数
    深入SpringMvc
    SpringMvc基础
    SSM整合
    Spring注解
    SpringAop编程
    2路插入排序
    Matplotlib绘图库简要介绍
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5274522.html
Copyright © 2020-2023  润新知