日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)

發布時間:2023/12/20 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Volley框架:

特點:

  • 通信更快,更簡單
  • Get,Post網絡請求及網絡圖像的高效率異步處理請求。
  • 當多個請求時,對網絡請求進行排序,按優先級處理
  • 當網絡狀況不好時,Volley可以自動對上次請求的數據進行緩存。
  • 當有多個請求同時進行時,可以將這些請求同時取消。
  • 和Activity生命周期聯動,當Activity銷毀時,可以同時取消網絡請求操作。
  • 缺點:
    不適合數據的上傳和下載,不適合大數據和流媒體的網絡請求。

    基本介紹:
    1.Volley的get和post請求方式的使用:
    StringRequest:對請求的數據返回結果類型不確定時使用
    JsonObjectRequest:確定返回數據為JsonObject類型時使用
    JsonArrayRequest:確定返回的數據是JsonArray時使用
    2.回調的使用:
    當我們請求成功,失敗,請求重試等回調方法
    3.Volley的網絡請求隊列的建立和取消隊列請求:
    在使用Volley時,首先要建立一個全局的請求隊列。然后在建立請求,將請求加入請求隊列中,這樣整個app的請求是通過這個隊列來管理的,方便取消某個請求或者取消所有請求的操作。
    4.Volley和Activity生命周期的聯動:
    volley請求的生命周期與Activity的生命周期是關聯在一起的??梢栽贏ctivity銷毀時,同時關閉請求,防止在后臺運行這個請求,造成內存溢出。
    在volley請求的生命周期與Activity的生命周期關聯的時候,設置Tag標簽,因為請求的關閉需要通過Tag標簽在請求隊列中查找,然后再Activity的onStop()方法里執行取消請求。
    5.Volley的簡單的二次回調封裝:
    使用自定義的,方便進行全局的管理

    Volley框架基本使用方法例子:

    package com.example.volleytest1;import java.util.HashMap; import java.util.Map;import org.json.JSONObject;import com.android.volley.RequestQueue; import com.android.volley.Request.Method; import com.android.volley.AuthFailureError; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.ImageLoader.ImageCache; import com.android.volley.toolbox.ImageLoader.ImageListener; import com.android.volley.toolbox.JsonObjectRequest; import com.android.volley.toolbox.NetworkImageView; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley;import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.support.v4.util.LruCache; import android.view.Menu; import android.widget.ImageView; import android.widget.Toast;/*** Volley是Android平臺網絡通信庫:更快,更簡單,更健壯* * @author Administrator* */ public class MainActivity extends Activity {private ImageView imageView;private NetworkImageView networkImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();getJSONVolley();loadImageVolley();NetWorkImageViewVolley();}private void initView() {imageView = (ImageView) findViewById(R.id.imageView);networkImageView = (NetworkImageView) findViewById(R.id.networkImageView);}// 使用Volley做Json字符串的請求public void getJSONVolley() {//建立請求隊列RequestQueue requestQueue = Volley.newRequestQueue(this);String JSONDateUrl = "http://apis.juhe.cn/mobile/get?";//參數意義:請求方式、Url、請求成功的回調方法,請求失敗的回調方法StringRequest jsonObjectRequest = new StringRequest(Method.POST,JSONDateUrl, new Response.Listener<String>() {@Overridepublic void onResponse(String arg0) {System.out.println(arg0);Toast.makeText(MainActivity.this, arg0, Toast.LENGTH_LONG).show();}}, new Response.ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {System.out.println(arg0.toString());Toast.makeText(MainActivity.this, arg0.toString(), Toast.LENGTH_LONG).show();}}){@Overrideprotected Map<String, String> getParams()throws AuthFailureError {Map<String,String> map = new HashMap<String, String>();map.put("phone", "15211807740");map.put("key", "2d35800313209bff48674f203fb38b91");return map;}};//設置Tag標簽jsonObjectRequest.setTag("aaa");//將請求加入到請求隊列中requestQueue.add(jsonObjectRequest);}//使用Volley做圖片的請求public void loadImageVolley() {String url = "http://g.hiphotos.baidu.com/image/pic/item/c2fdfc039245d688427eb40ca1c27d1ed21b241d.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lurCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lurCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lurCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);ImageListener listener = imageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher);imageLoader.get(url, listener);}//使用NetWorkImageView完成圖片加載//NetWorkImageView是Volley提供的一個控件,是用來替代ImageView的//NetWorkImageVIew控件的優點:當父類控件dispatch時,NetWorkImageView控件會自動取消網絡請求,所以不用擔心生命周期問題public void NetWorkImageViewVolley(){String imageUrl = "http://img2.3lian.com/2014/f7/5/d/22.jpg";RequestQueue requestQueue = Volley.newRequestQueue(this);final LruCache<String, Bitmap> lruCache = new LruCache<String, Bitmap>(20);ImageCache imageCache = new ImageCache() {@Overridepublic void putBitmap(String key, Bitmap value) {lruCache.put(key, value);}@Overridepublic Bitmap getBitmap(String key) {return lruCache.get(key);}};ImageLoader imageLoader = new ImageLoader(requestQueue, imageCache);networkImageView.setTag("networkimageview");networkImageView.setImageUrl(imageUrl, imageLoader);}}

    運行結果:

    對上邊代碼中 使用Volley做Json字符串的請求部分 的回調做二次回調封裝:
    SecondActivity類:

    package com.test.volleytest2;import java.util.HashMap; import java.util.Map;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;import com.android.volley.VolleyError; import com.example.volleytest1.R;public class SecondActivity extends Activity {private EditText editText;private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);initView();setOnListener();}private void setOnListener() {button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {textView.setText("");getJSONVolley();}});}private void initView() {editText = (EditText) findViewById(R.id.id_edittext);button = (Button) findViewById(R.id.id_button);textView = (TextView) findViewById(R.id.id_textview);}private void getJSONVolley() {String phone = editText.getText().toString();String key = "2d35800313209bff48674f203fb38b91";String url = "http://apis.juhe.cn/mobile/get?";Map<String,String> map = new HashMap<String, String>();map.put("phone", phone);map.put("key", key);RequestUtils.getVolley(SecondActivity.this, url, map,new MyListener() {@Overridepublic void success(String info) {System.out.println(info);textView.setText(info);}@Overridepublic void failure(VolleyError errorInfo) {System.out.println(errorInfo.toString());textView.setText(errorInfo.toString());}});}}

    RequestUtils類:

    package com.test.volleytest2;import java.util.Map;import android.content.Context;import com.android.volley.Request.Method; import com.android.volley.AuthFailureError; import com.android.volley.RequestQueue; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley;public class RequestUtils {public static void getVolley(Context context,String url,final Map<String,String> map,MyListener listener){RequestQueue queues = Volley.newRequestQueue(context);StringRequest stringRequest = new StringRequest(Method.POST, url, listener.requestSuccess(), listener.requestFailure()){@Overrideprotected Map<String, String> getParams() throws AuthFailureError {return map;}};stringRequest.setTag("abc");queues.add(stringRequest);queues.start();}}

    MyListener類:

    package com.test.volleytest2;import com.android.volley.Response.ErrorListener;import com.android.volley.Response.Listener;import com.android.volley.VolleyError;public abstract class MyListener{private Listener<String> listener;private ErrorListener errorListener;public abstract void success(String info);public abstract void failure(VolleyError errorInfo);public Listener<String> requestSuccess(){listener = new Listener<String>() {@Overridepublic void onResponse(String arg0) {success(arg0);}};return listener;}public ErrorListener requestFailure(){errorListener = new ErrorListener() {@Overridepublic void onErrorResponse(VolleyError arg0) {failure(arg0);}};return errorListener;}}

    運行結果:

    Async-http網絡框架

    高效的網絡數據請求,文件的上傳和下載
    特點:

  • 清晰地網絡請求回調
  • 請求使用ThreadPool,限制并發資源使用情況(防止內存溢出)
  • Get/Post基于參數構建使用(RequestParams),方便
  • Multipart文件上傳,大數據上傳下載
  • 自動智能請求重試,優化了質量不一的移動連接
  • 內置響應解析成JSON,使用JsonHttpResponseHandler
  • 持久化cookie存儲,保存cookie到你的應用程序的SharedPreferences
  • 二進制文件(圖片等)的下載,使用BinaryHttpResponseHandler

    使用Get/Post請求數據的基本操作:

  • package com.example.asncyhttptest;import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams;import android.os.Bundle; import android.app.Activity; import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); // asynchttpGet();asynchttpPost();}// 使用Post方式請求private void asynchttpPost() {AsyncHttpClient client = new AsyncHttpClient();String url = "http://apis.juhe.cn/mobile/get?";RequestParams params = new RequestParams();params.put("phone", "15211807740");params.put("key", "2d35800313209bff48674f203fb38b91");client.post(url, params, new AsyncHttpResponseHandler() {@Override// 請求失敗public void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println(arg0.toString());}@Override// 請求成功public void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println(arg0);}});}// 使用Get方式請求private void asynchttpGet() {AsyncHttpClient client = new AsyncHttpClient();String url = "http://apis.juhe.cn/mobile/get?phone=15211807740&key=2d35800313209bff48674f203fb38b91";client.get(url, new AsyncHttpResponseHandler() {@Override// 請求失敗public void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println(arg0.toString());}@Override// 請求成功public void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println(arg0);}});}}

    對上邊例子中的Get/Post方法中的請求回調進行二次封裝:
    SecondActivity類:

    package com.test.asncyhttptest;import com.example.asncyhttptest.R; import com.loopj.android.http.RequestParams;import android.app.Activity; import android.os.Bundle;public class SecondActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);asynchttpGet();asynchttpPost();}//使用Post方法請求private void asynchttpPost() {String postUrl = "http://apis.juhe.cn/mobile/get?";RequestParams params = new RequestParams();params.put("phone", "15211807740");params.put("key", "2d35800313209bff48674f203fb38b91");RequestUtils.ClientPost(postUrl, params, new NetCallBack() {@Overridepublic void RequestSuccess(String info) {System.out.println("POST:"+info);}@Overridepublic void RequestFailure(String info) {System.out.println("POST"+info);}});}//使用Get方式請求private void asynchttpGet() {String getUrl = "http://apis.juhe.cn/mobile/get?phone=15211807740&key=2d35800313209bff48674f203fb38b91";RequestUtils.ClientGet(getUrl, new NetCallBack() {@Overridepublic void RequestSuccess(String info) {System.out.println("GET:"+info);}@Overridepublic void RequestFailure(String info) {System.out.println("GET:"+info);}});}}

    RequestUtils類:

    package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.RequestParams;public class RequestUtils {public static AsyncHttpClient client = new AsyncHttpClient();public static void ClientGet(String url,NetCallBack callback){client.get(url, callback);}public static void ClientPost(String url,RequestParams params,NetCallBack callback){client.post(url, params, callback);}}

    NetCallBack類:

    package com.test.asncyhttptest;import com.loopj.android.http.AsyncHttpResponseHandler;public abstract class NetCallBack extends AsyncHttpResponseHandler{public abstract void RequestSuccess(String info);public abstract void RequestFailure(String info);@Overridepublic void onStart() {super.onStart();System.out.println("請求開始");}@Overridepublic void onSuccess(String arg0) {super.onSuccess(arg0);System.out.println("請求成功");RequestSuccess(arg0);}@Overridepublic void onFailure(Throwable arg0, String arg1) {super.onFailure(arg0, arg1);System.out.println("請求失敗");RequestFailure(arg0.toString());}}

    運行結果:

    總結

    以上是生活随笔為你收集整理的Android中Http网络请求库框架Volley和Asnyc-http的使用---第三方库学习笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。