首先我們來看幾個知識點
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>