android 带参数访问网络,安卓学习之Volley post带参数请求网络数据

volley请求用于小数据的请求速度是特别快的,比其他的请求框架简单而实用。

对于初学者来说 是一款 简单易懂 封装好的 网络请求框架。

在Appliction中 定义了请求队列

public class MyApplication extends Application{

public static RequestQueue queues;

@Override

public void onCreate() {

// TODO Auto-generated method stub

super.onCreate();

queues = Volley.newRequestQueue(getApplicationContext());

}

public static RequestQueue getHttpQueues(){

return queues;

}

}

接下来我 用了官网里面 封装好的 StringRequest 类重写了 一遍

import java.io.ByteArrayInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.util.Map;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.xmlpull.v1.XmlPullParserException;

import com.android.volley.AuthFailureError;

import com.android.volley.NetworkResponse;

import com.android.volley.Request;

import com.android.volley.Response;

import com.android.volley.Response.ErrorListener;

import com.android.volley.Response.Listener;

import com.android.volley.toolbox.HttpHeaderParser;

/**

@date 2013/8/3

post请求参数

@author Administrator

*/

public class StringRequests extends Request{

private Map params;

private Listener mListener;

/**

* Creates a new request with the given method.

*

* @param method the request {@link Method} to use

* @param url URL to fetch the string at

* @param listener Listener to receive the String response

* @param errorListener Error listener, or null to ignore errors

*/

public StringRequests(String url,Listener listner,ErrorListener errorLister,

Map map) {

super(Request.Method.POST, url, errorLister);

// TODO Auto-generated constructor stub

mListener = listner;

params = map;

}

@Override

protected Map getParams() throws AuthFailureError{

return params;

}

@Override

protected void deliverResponse(String response) {

// TODO Auto-generated method stub

mListener.onResponse(response);

}

@Override

protected Response parseNetworkResponse(NetworkResponse response) {

// TODO Auto-generated method stub

String datas;

try{

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

try {

datas = XmlOrJson(datas); //去掉xml的

} catch (XmlPullParserException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//return Response.success(new String(datas),HttpHeaderParser.parseCacheHeaders(response));

}catch(UnsupportedEncodingException ex){

datas = new String(response.data);

}

return Response.success(datas,HttpHeaderParser.parseCacheHeaders(response));

}

/**

* 去掉xml头部

* 处理解析出来的json

* 如果不是json数据格式的就这样的取法

* @param xmlStr

* @return

* @throws XmlPullParserException

*/

public static String XmlOrJson(String xmlStr) throws XmlPullParserException {

// TODO Auto-generated method stub

InputStream inputStream = null;

// 首先找到xml文件

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

try {

// 找到xml,并加载文档

DocumentBuilder builder = factory.newDocumentBuilder();

inputStream = new ByteArrayInputStream(xmlStr.getBytes("UTF-8"));

Document document = builder.parse(inputStream);

// 找到根Element

Element root = document.getDocumentElement();

String nodeValue2 = root.getFirstChild().getNodeValue();

System.out.println("nodeValue2:" + nodeValue2);

return nodeValue2;

} catch (Exception e) {

e.printStackTrace();

return "0";

} finally {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

其它请求方式可以按StringReqest 这种方式去模仿的写

程序中调用也很简单我封装是 post 请求数据 如下:

private void loadStringData(){

String url = "http://*******";

Map params = new HashMap();

params.put("", "");

params.put("", "");

params.put("", "200");

params.put("", "*");

Request request = new StringRequests(url, new Listener() {

@Override

public void onResponse(String response) {

// TODO Auto-generated method stub

//mytet.setText(response);

if(!response.equals("")&&!response.equals(null)){

//getGsonData(response);

//使用到这里 只要把数据取出来就可以随心所欲的去用GSON 解析数据或者使用JSONObject。

Log.i("取出来的数据",response);

}

}

}, new ErrorListener() {

@Override

public void onErrorResponse(VolleyError error) {

// TODO Auto-generated method stub

Log.i("========error======", error+"");

}

},params);

//修改默认超时时间

request.setRetryPolicy(new DefaultRetryPolicy(5000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES,

DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

request.setTag("你想要的名字"); //设置别名

MyApplication.getHttpQueues().add(request); //添加到队列里面

}

到此数据请求出来就可以使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值