Ⅰ android volley框架淘汰了嗎
淘汰策略一般是通過數量或者容量限制。每寫一個app都自成一套。此外,一旦我們脫離了程序,我們將不再獲得我們Bitmap的元數據,比如請求網路鏈接,資源描述符等等,而且對於同一個網路請求我們要用單獨的裝飾器來攔截。當然,之所以列舉這些出來,是因為在Volley裡面已經很好的解決了這些問題,當你下載了Volley的源碼編譯以後,你會發現,Volley所涵蓋的功能遠比你考慮的要多。而且這些東西,已經被很好的封裝起來。而且Volley的代碼讀起來也非常的順口,並不像Android原生的一些代碼一樣又臭又長。如果說Volley是一種好的開源框架,不如說Volley是一套現在看起來還不錯的設計模式。而且從Volley所提供的有些介面來說,Volley已經將很大部分封裝在框架內部,對於api調用者來說,無疑是個福音。
Ⅱ android volley request 有對相應數據進行hander 處理嗎
有hander機制的,來完成主要的非同步操作. 原生開發中拋開AsyncTask,只有hander機制能顯示子線程對於UI線程的操作.
1.volley只適應於8也就是2.2以上的版本,因為其中使用了androidhttpclient
2.volley工作原理:
下面這圖是volley的工作原理:
其核心為requestqueue,在其中包含一個CacheDispatcher和若干個networkDispatcher。所有的下載任務都在一個優先順序隊列中維護,然後會發到cacheQueue,CacheDispatcher不斷盯著cacheQueue,進行任務處理,其中的細節見3.若沒得到cache,講任務假如到networkQueue,networkDispatcher不斷盯著networkQueue,進行網路請求,其中的細節見4。不管在cacheDispatcher還是networkDispatcher,若得到response,發出給listener接聽到。
3.cacheDispatcher工作細節
此處用到了本地的文件緩存,此處設計借鑒了瀏覽器的緩存設計。會讀取response的header請求,根據header的內容設置緩存的過期時間。緩存文件分為兩部分,第一部分為存儲緩存的頭,第二部分就是緩存的實際內容。在讀取緩存時,會根據頭部過期時間的設置,判斷是否需要再發出網路請求。
4.networkDispatcher工作細節
此處是網路請求,這塊有兩個關鍵類,一個是BasicNetwork,一個是httpStack。 basicNetwork中包含了httpstack,在httpstack中進行網路請求,然後basicNetwork對得到的response進行了parse和加入文件緩存等工作處理,最後在此處發出response,由listener接收。
5.圖片處理
在上文中是volley一般的工作原理,根據圖片的特點,volley中還有三個特殊的類 NetworkImageView,ImageLoader和ImageRequest對圖片做了一些特殊處理。
ImageRequest在doparse中結合圖片和控制項特點,對bitmap生成進行大小縮放,以達到清晰
和佔用更少內存的目的
ImageLoader是載入圖片的helper,其中有個兩個map,flightRequest和BatchResponse,flight的主要目的對每個request進行唯一性確認,使其不再重復生成,而且在控制項顯示圖片不回出現錯圖的情況。batch response則是在收到圖片厚發給listen時控制,這樣也可以再此處取消請求,加快載入速度
NetworkImageView繼承與Imageview,主要結合了ImageLoader可以非同步展示網路圖片,同時在detach時取消網路請求。
Ⅲ android用volley怎麼給伺服器發送json
1.下載官網的android SDK(本人用的是eclipse)
2.新建一個android項目:
File->new->andriod Application project
7、下面就是具體的使用post和get請求的代碼:
A:發送get請求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Iterator;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import com.android.volley.Request;
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;
/**
* Demo
*/
public class MainActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
簡旁模super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
TextView textView = (TextView)findViewById(R.id.textView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hello");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!register.action?pwd='測試'";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//這里可以列印出接受到返回的json
Log.e("bbb", response.toString());
攔緩}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
}
}
B:發送post請求如下:
package com.example.xiaoyuantong;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.volley.Request;
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 android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class PostActivity extends Activity {
private RequestQueue requestQueue ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post);
init();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.post, menu);
return true;
}
private void init() {
TextView textView = (TextView)findViewById(R.id.postView);
requestQueue = Volley.newRequestQueue(this);
getJson();
textView.setText("hellopost");
}
private void getJson(){
String url = "http://192.168.20.1:8080/xiaoyuantong/userAction!reg.action";
JsonObjectRequest jsonObjectRequest ;
JSONObject jsonObject=new JSONObject() ;
try {
jsonObject.put("name", "張三");
jsonObject.put("sex", "女");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//列印前台向後台要提交的post數據
Log.e("post",jsonObject.toString());
//發送post請求
try{
jsonObjectRequest = new JsonObjectRequest(
Request.Method.POST, url, jsonObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
//列印請求後獲取的json數據
Log.e("bbb", response.toString());
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError arg0) {
// System.out.println("sorry,Error");
Log.e("aaa", arg0.toString());
}
});
requestQueue.add(jsonObjectRequest);
} catch (Exception e) {
e.printStackTrace();
System.out.println(e + "");
}
requestQueue.start();
}
}
8、在android的logcat裡面能查看到列印的請求
(紅色的顯示的是我在後台請求到數據)
有時候logcat顯示不出數據,可能是消息被過濾了,可以在左邊點擊「減號」刪除過濾
在server端,也就是在myeclipse的建立的另一個後台工程裡面能獲取到請求:
9、後續會補充json數據的解析部分,以及過度到移動雲的部分,上面只是c/s模式下的一個簡單的基於http的請求應答例子。