二、功能請求
大概知道了volley是什麼了,第二章我們就來看下volley,自己默認有哪些功能。
1.StringRequest
package com.example.VolleyDemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import static com.android.volley.Response.*;
public class StringActivity extends Activity {
private TextView mStringResult;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_string);
mStringResult = (TextView) findViewById(R.id.StringTxt);
}
RequestQueue mQueue;
@Override
protected void onStart() {
super.onStart();
/********************4步驟********************/
//1.創建一個RequestQueue對象
mQueue = Volley.newRequestQueue(this);
//2.啓動RequestQueue
mQueue.start();//請求隊列開始進行調度
//3.創建一個StringRequest
StringRequest stringRequest = new StringRequest("http://www.baidu.com",
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("TAG", response);
mStringResult.setText(response);
}
}, new ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
Toast.makeText(StringActivity.this, "網絡錯誤", Toast.LENGTH_SHORT).show();
}
});
//4.將StringRequest對象添加到RequestQueue裏面
stringRequest.setTag("StringActivity");
mQueue.add(stringRequest);
/******************************************/
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mQueue!=null){
mQueue.cancelAll("StringActivity");
}
}
}
RequestQueue是一個請求隊列對象,它可以緩存所有的HTTP請求,然後按照一定的算法併發地發出這些請求。
RequestQueue內部的設計就是非常合適高併發的,因此我們不必爲每一次HTTP請求都創建一個RequestQueue對象,這是非常浪費資源的,基本上在每一個需要和網絡交互的Activity中創建一個RequestQueue對象就足夠了。
Volley的比較核心的一個類就是RequestQueue,一個請求隊列。它負責管理工作線程,讀寫緩存,和解析、分發響應(具體操作還是由具體的類實現),即將發出的Http請求都會首先聚集在這裏等待工作線程來實現請求。RequestQueue可以被看成一艘載滿Http請求的航空母艦,而工作線程就是彈射器嘍。
1.獲取RequestQueue(得到一艘航母,可以是自己造的,也可以是委託別人造的,下面會提到)
2.實例化一個Request(得到一架飛機,你也知道飛機又很多類型啦)
3.將Request加入RequestQueue,等待工作線程將其發送出去(把飛機從機庫升上起飛甲板,等待彈射器把它扔出去)
起飛偵察機-發出GET請求
但是但是StringRequest中並沒有提供設置POST參數的方法,但是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來獲取POST參數,那麼解決方法自然也就有了,我們只需要在StringRequest的匿名類中重寫getParams()方法,在這裏設置POST參數就可以了.
2.JsonRequest
package com.example.VolleyDemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
import static com.android.volley.Response.*;
public class JsonActivity extends Activity {
private TextView mJsonResult;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json);
mJsonResult = (TextView) findViewById(R.id.JsonTxt);
}
RequestQueue mQueue;
@Override
protected void onStart() {
super.onStart();
/*******************4步驟***********************/
//1.創建一個RequestQueue對象
mQueue = Volley.newRequestQueue(this);
//2.啓動RequestQueue
mQueue.start();
//3.創建一個JsonObjectRequest
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://pipes.yahooapis.com/pipes/pipe.run?_id=giWz8Vc33BG6rQEQo_NLYQ&_render=json", null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("TAG", response.toString());
try {
mJsonResult.setText(response.getString("count"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("TAG", error.getMessage(), error);
Toast.makeText(JsonActivity.this, "網絡錯誤", Toast.LENGTH_SHORT).show();
}
});
//4.將JsonObjectRequest對象添加到RequestQueue裏面
mQueue.add(jsonObjectRequest);
/******************************************/
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mQueue!=null){
mQueue.cancelAll(this);
}
}
}