(Android)基于volley框架的get()和post()请求

本文详细介绍如何使用Volley框架在Android应用中实现GET和POST请求,包括导入库、添加网络权限、创建请求队列及发送不同数据类型的请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般的客户端都有向服务端请求数据的功能。
Android的app也是如此,于是我们借助了volley这个框架实现数据量较小,处理快的的get()和post()请求。


1.将volley包导入到Android Studio中,一般将包放在app目录下的libs目录里。


2.编写layout布局。这里我就直接上代码吧。

<Button
    android:onClick="OOKK"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="确定"
    android:id="@+id/button"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="107dp" />

<Button
    android:onClick="WriteClick"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="写数据"
    android:id="@+id/button2"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="116dp" />

3.在AndroidMain.xml添加网络访问权限

<!--加入网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>

4.定义一个Java类,用来控制全局的请求队列

/**
*创建一个全局的请求队列
* Created by poulwalker on 2016/9/17.
*/

public class MyApp extends Application{
public static RequestQueue queues;

@Override
public void onCreate() {
    super.onCreate();
    queues= Volley.newRequestQueue(getApplicationContext());//实例化请求队列,参数是app的上下文
}

}

/*
* 写一个方法,用来获取请求队列
*
* */

public static RequestQueue getHttpQueues(){
    return queues;
}

5.get()请求普通类型的数据

/*
* new StringRequest(int method,String url,Listener listener,ErrorListener errorListener)
* method:请求方式,Get请求为Method.GET,Post请求为Method.POST
* url:请求地址
* listener:请求成功后的回调
* errorListener:请求失败的回调
*/

private void volley_StringRequestGet() {
    /*
    * 创建stringRequest这个请求对象,请求我们的数据接口
    * */
    /*
    * 第一个参数是请求方式,2,请求的接口地址,3.请求成功的回调,4.请求失败的回调
    * */
    String url="http://xxx.xxx.xxx/xxx";//地址栏
    StringRequest request=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String s) {
            Toast.makeText(WebActivity.this,s.toString(),Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,"aaaa",Toast.LENGTH_LONG).show();;

        }
    });
    /*
    * 创立tag标签,方便寻找
    * */
    request.setTag("volleyStringRequestGet");
    /*
    * 将request添加到全局变量里面
    * */
    MyApp.getHttpQueues().add(request);

}

这里要注意的是由于get()是无参数请求的,因此要带参数请求数据时,就必须将参数放在url地址里。


get()请求jsonobject的数据

/*
* 第三个参数为请求参数
* 请求Json数据
* */
/**
 *  new JsonObjectRequest(int method,String url,JsonObject jsonObject,Listener listener,ErrorListener errorListener)
 *  method:请求方式,Get请求为Method.GET,Post请求为Method.POST
 *  url:请求地址
 *  JsonObject:Json格式的请求参数。如果使用的是Get请求方式,请求参数已经包含在url中,所以可以将此参数置为null
 *  listener:请求成功后的回调
 *  errorListener:请求失败的回调
 */
private void volley_JsonObjectRequestGet(){
    String url="http://xxx.xxx.xxx/xxx/xxx";
    JsonObjectRequest request=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject jsonObject) {
            Toast.makeText(WebActivity.this,jsonObject.toString(),Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,"aaaa",Toast.LENGTH_LONG).show();;

        }
    });
    /*
    * 创立tag标签,方便寻找,可以在全局请求队列中通过Tag标签进行请求的查找
    * */
    request.setTag("volleyJsonObjectRequestGet");
    /*
    * 将request添加到全局队列里面
    * */
    MyApp.getHttpQueues().add(request);
}

get()请求JsonArray数组数据

/*
* 请求json数组
* JsonArrayRequest只有get请求,可以在url后面加上参数
* */
private void volley_JsonArraryRequestGet(){
    String url="http://xxx.xxxx.xxx/xxx";
    JsonArrayRequest request=new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
        @Override
        public void onResponse(JSONArray jsonArray) {
            Toast.makeText(WebActivity.this,jsonArray.toString(),Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,"error"+volleyError.toString(),Toast.LENGTH_LONG).show();

        }
    });
            /*
    * 创立tag标签,方便寻找
    * */
    request.setTag("volleyJsonArraryRequestGet()");
    /*
    * 将request添加到全局变量里面
    * */
    MyApp.getHttpQueues().add(request);
}

6.post请求


普通类型的post请求

/*
* post传递参数不能写在url里面,在getParams里面写传递参数
* */
private void volley_StringRequestPost(){
    String url="http://xxx.xxx.xxx/xxx";
    StringRequest request=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String s) {
            Toast.makeText(WebActivity.this,s.toString(),Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,"aaaa",Toast.LENGTH_LONG).show();

        }
    }){
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String,String> hashMap=new HashMap<>();
            hashMap.put("cno","1234");//第一个为key,第二个为值
            hashMap.put("name","qwe");
            hashMap.put("time","100");
            return hashMap;
        }
    };
    request.setTag("volleyStringRequestPost");
    MyApp.getHttpQueues().add(request);

}

以json方式请求数据,返回的是json格式

//以json方式请求数据,返回的是json格式
private void volley_JsonObjectRequestPost(){
    String url="http://xxx.xxx.xxx/xxx";
    Map<String,String> map=new HashMap<>();
    map.put("cno","12345677");
    JSONObject object=new JSONObject(map);
    //将map转化为JSONObject对象
    JsonObjectRequest objectRequest=new JsonObjectRequest(Request.Method.POST, url,object, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject jsonObject) {
            Toast.makeText(WebActivity.this,jsonObject.toString(),Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,volleyError.toString(),Toast.LENGTH_LONG).show();

        }
    });
    objectRequest.setTag("volleyJsonObjectRequestPost");
    MyApp.getHttpQueues().add(objectRequest);
}

以普通方式请求数据,返回的是json格式


我们需要定义一个类,用来复写volley方法。

public class NormalPostRequest extends Request{

private Map<String, String> mMap;

private Response.Listener<JSONObject> mListener;


public NormalPostRequest(String url, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener, Map<String, String> map) {

    super(Method.POST, url, errorListener);


    mListener = listener;

    mMap = map;

}


//mMap是已经按照前面的方式,设置了参数的实例
@Override
protected Map<String, String> getParams() throws AuthFailureError {
    return mMap;
}



//此处因为response返回值需要json数据,和JsonObjectRequest类一样即可
@Override
protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {

    try {

        String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));



        return Response.success(new JSONObject(jsonString),HttpHeaderParser.parseCacheHeaders(response));

    } catch (UnsupportedEncodingException e) {

        return Response.error(new ParseError(e));

    } catch (JSONException je) {

        return Response.error(new ParseError(je));

    }

}

@Override
protected void deliverResponse(JSONObject jsonObject) {
    mListener.onResponse(jsonObject);
}

}


接着在主活动里以普通方式请求数据。

//以普通方式请求数据,返回的是json格式
private void volley_NormallJsonObjectRequestPost(){
    String url="http://xxx.xxx.xxx/xxx";
    Map<String,String> map=new HashMap<>();
    map.put("cno","1234");
    Request<JSONObject> request=new NormalPostRequest(url, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject jsonObject) {
            //Log.d("TAG",jsonObject.toString());
            //Toast.makeText(WebActivity.this,jsonObject.toString(),Toast.LENGTH_LONG).show();
            javaBean=GsonImpl.get().toObject(jsonObject.toString(),JavaBean.class);
            //javaBean=GsonImpl.get().toList(jsonObject.toString(),new TypeToken<List<JavaBean.DataBean.DataJBean.getName()>>(){}.getType());
            String n=javaBean.getStatus()+javaBean.getData().getCode()+"";
            String name=javaBean.getData().getData().get(0).getSex().toString();

            Toast.makeText(WebActivity.this,n,Toast.LENGTH_LONG).show();

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {
            Toast.makeText(WebActivity.this,"AAA",Toast.LENGTH_LONG).show();
        }
    },null);

    request.setTag("volleyNormallJsonObjectRequestPost");
    MyApp.getHttpQueues().add(request);
}

基本上volley框架已经讲完了。当然,还能用volley框架请求图片,缓存图片,上传文件等。下期我们讲如何利用Gson工具类来解析json数据。得到我们所要的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值