首先我们来看几个知识点
RequestQueue的用法
1.创建请求队列。
2.创建StringRequest对象。
3.将StringRequest对象添加到请求队列中。
下面我们用一个小实例来讲解
简单的POST和GET两种请求方式,要实现就需要第三方架包,导入Volley架包,没有的可以跟我要。因为Volley一直是由谷歌维护的,所以性能方面还是比较优秀的。让你无需考虑建立数据库和线程,很方便。
来来来废话不多说,直接上代码:
这是一个工具包,还是蛮好用的,喜欢就拿走
public class StringPostRequest extends StringRequest {
private Map<String, String> params;
private Map<String,String> header;
//往Map中放值
public StringPostRequest(String url, Listener<String> listener,
Response.ErrorListener errorListener) {
super(Method.POST, url, listener, errorListener);
params = new HashMap<String, String>();
header = new HashMap<String,String>();
}
//回调
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
return header;
}
public void putHeaders(String key, String value){
this.header.put(key, value);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return params;
}
public void putParams(String key, String value){
this.params.put(key, value);
}
}
同时我们需要联网帮助包,宝宝自己写的,还蛮好用的,数据是从API Store上获取哒
public class UrlUtil {
//获取 频道的网络接口
public static String channelUrl = "http://apis.baidu.com/showapi_open_bus/channel_news/channel_news";
/*获取 频道对应新闻的网络接口
get 请求参数:
channelId : 新闻频道id,必须精确匹配
channelName :新闻频道名称,可模糊匹配
title :新闻标题,模糊匹配
page :页数,默认1。每页最多20条记
needContent : 是否需要返回正文,1为需要
needHtml :是否需要返回正文的html格式,1为需要
*/
public static String newsUrl = "http://apis.baidu.com/showapi_open_bus/channel_news/search_news";
//获取天气接口
public static String weatherUrl="http://apis.baidu.com/thinkpage/weather_api/suggestion";
/*参数名 类型 必填 参数位置 描述 默认值
location string 是 urlParam 所查询的位置 beijing
language string 否 urlParam 语言zh-Hans
unit string 否 urlParam 单 c
start string 否 urlParam 起始时间 0
days string 否 urlParam 天数3
*/
}
正式的Activity
public class VolleyActivity extends AppCompatActivity implements View.OnClickListener{
private Button bt;
private TextView show;
private RequestQueue queue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_volley);
bt= (Button) findViewById(R.id.bt);
show= (TextView) findViewById(R.id.show);
//本类监听 一定要有的,没有不报错,但是运行不出来
bt.setOnClickListener(this);
//初始化volley请求队列
queue= Volley.newRequestQueue(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
if(id==R.id.bt){
PostVolley();
}
}
public void GetVolley(){
//三个参数,第二个是访问成功的监听 第三个是访问失败的监听
String url="http://192.168.1.3:8080/HttpTest/index.jsp"+
"?option=getUser&uName=jerehedu";
StringRequest sr=new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
show.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
show.setText(volleyError.getMessage());
}
});
queue.add(sr);
}
public void PostVolley(){
String url = UrlUtil.weatherUrl;
final StringPostRequest spr=new StringPostRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
show.setText(s);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
spr.putHeaders("apikey","5b46143955a4b1ff1b470a94315625cd");
queue.add(spr);
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<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="com.edu.jereh.android9.VolleyActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/show"
android:layout_below="@id/bt"
/>
</RelativeLayout>