0913Android基础网络技术之Volley
来源:互联网 发布:成都 python兼职 编辑:程序博客网 时间:2024/05/21 09:04
使用volley访问网络
Volley工作原理简介
Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程。
主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题。
下图中,蓝色部分代表主线程,绿色部分代表缓存线程,橙色部分代表网络线程。我们在主线程中调用RequestQueue的add()方法来添加一条网络请求,这条请求会先被加入到缓存队列当中,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程。如果在缓存中没有找到结果,则将这条请求加入到网络请求队列中,然后处理发送HTTP请求,解析响应结果,写入缓存,并回调主线程。
Volley使用
导包,右键点击module选中openModuleSetting,选中当前module,在上侧横栏中选中Denpendencies,点击+号,选中Library dependency,查找volley找到这个包添加进来
添加的包
添加权限
<uses-permission android:name="android.permission.INTERNET" />
使用方法:
- 创建一个RequestQueue对象(一般是新建一个类将其单例化)
- 创建一个RequestQueue对象
- .将StringRequest对象添加到RequestQueue里面
单例RequestQueue,设置成单例后就不必每次新创一个消息队列了(如果没有的话则新建一个),节省资源
public class MMySingleton { private RequestQueue requestQueue; private static MMySingleton mMySingleton; private MMySingleton(Context context){ requestQueue= Volley.newRequestQueue(context); } public synchronized static MMySingleton getInstance(Context context){ if(mMySingleton==null){ mMySingleton=new MMySingleton(context); } return mMySingleton; } public RequestQueue getRequestQueue() { return requestQueue; }}
创建一个RequestQueue对象
//get//创建一个StringRequest的get对象。四个参数,get/post方法,url,Listener,ErrorListenerStringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { mTvVolley.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTvVolley.setText("网络连接错误"); } });//post//创建一个StringRequest的post对象,比get多一个params的参数StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { mTvVolley.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTvVolley.setText("网络连接错误"); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> map=new HashMap<>(); map.put("username","VolleyPost"); map.put("password","666666"); return map; } };
将StringRequest对象添加到RequestQueue里面
MMySingleton.getInstance(getApplicationContext()).getRequestQueue().add(stringRequest)
实现效果
NetWorkImageViEW(暂不说明)
它使用的单例
package com.example.laowang.myinternet;import android.content.Context;import android.graphics.Bitmap;import android.util.LruCache;import com.android.volley.Request;import com.android.volley.RequestQueue;import com.android.volley.toolbox.ImageLoader;import com.android.volley.toolbox.Volley;/** * Created by Administrator on 2015/9/14. */public class MySingleton { private static MySingleton mInstance; private RequestQueue mRequestQueue; private ImageLoader mImageLoader; private static Context mCtx; private MySingleton(Context context) { mCtx = context; mRequestQueue = getRequestQueue(); mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() { private final LruCache<String, Bitmap> cache = new LruCache<String, Bitmap>(20); @Override public Bitmap getBitmap(String url) { return cache.get(url); } @Override public void putBitmap(String url, Bitmap bitmap) { cache.put(url, bitmap); } }); } public static synchronized MySingleton getInstance(Context context) { if (mInstance == null) { mInstance = new MySingleton(context); } return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { // getApplicationContext() is key, it keeps you from leaking the // Activity or BroadcastReceiver if someone passes one in. mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext()); } return mRequestQueue; } public <T> void addToRequestQueue(Request<T> req) { getRequestQueue().add(req); } public ImageLoader getImageLoader() { return mImageLoader; }}
在活动中调用
mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png", MySingleton.getInstance(this).getImageLoader());
达到的效果
全部代码
单例在上文中完整出现过,不再说明。
活动
package com.example.laowang.myinternet;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import com.android.volley.AuthFailureError;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.NetworkImageView;import com.android.volley.toolbox.StringRequest;import com.android.volley.toolbox.Volley;import java.util.HashMap;import java.util.Map;/** * Created by Administrator on 2015/9/14. */public class MyVolleyActivity extends Activity implements View.OnClickListener{ private Button mBtnVolleyGet; private TextView mTvVolley; private Button mBtnNetImageView; private Button mBtnVolleyPost; private NetworkImageView mNetworkImageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_volley); mBtnVolleyGet = (Button) findViewById(R.id.btn_volley_get); mTvVolley= (TextView) findViewById(R.id.tv_volley); mNetworkImageView= (NetworkImageView) findViewById(R.id.networkimageview); mBtnNetImageView= (Button) findViewById(R.id.btn_img); mBtnVolleyPost= (Button) findViewById(R.id.btn_volley_post); mBtnVolleyGet.setOnClickListener(this); mBtnNetImageView.setOnClickListener(this); mBtnVolleyPost.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_volley_get: volleyGet(); break; case R.id.btn_volley_post: volleyPost(); break; case R.id.btn_img: mNetworkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png", MySingleton.getInstance(this).getImageLoader()); break; default: break; } } private void volleyPost() { String url="http://192.168.0.44:8080/MyServiceTest/MyTestServlet";// String url="http://www.baidu.com";// 创建一个RequestQueue对象。// RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());// 创建一个StringRequest对象。四个参数,get/post方法,url,Listener,ErrorListener StringRequest stringRequest=new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { mTvVolley.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTvVolley.setText("网络连接错误"); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String, String> map=new HashMap<>(); map.put("username","VolleyPost"); map.put("password","666666"); return map; } };// 将StringRequest对象添加到RequestQueue里面。// requestQueue.add(stringRequest);// api中的单例// MySingleton.getInstance(this).addToRequestQueue(stringRequest);// 自己写的单例 MMySingleton.getInstance(getApplicationContext()).getRequestQueue().add(stringRequest); } private void volleyGet() { String url="http://192.168.0.44:8080/MyServiceTest/MyTestServlet?username=VolleyGet&password=123456";// String url="http://www.baidu.com";// 创建一个RequestQueue对象。// RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());// 创建一个StringRequest对象。四个参数,get/post方法,url,Listener,ErrorListener StringRequest stringRequest=new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { mTvVolley.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTvVolley.setText("网络连接错误"); } });// 将StringRequest对象添加到RequestQueue里面。// requestQueue.add(stringRequest);// api中的单例// MySingleton.getInstance(this).addToRequestQueue(stringRequest);// 自己写的单例 MMySingleton.getInstance(getApplicationContext()).getRequestQueue().add(stringRequest); }}
布局
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center" android:orientation="vertical"> <TextView android:id="@+id/tv_volley" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_volley_get" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="VolleyGet" /> <Button android:id="@+id/btn_volley_post" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="VolleyPost" /> <Button android:id="@+id/btn_img" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="NetworkImageView" /> <com.android.volley.toolbox.NetworkImageView android:id="@+id/networkimageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></ScrollView>
0 0
- 0913Android基础网络技术之Volley
- Android 基础之网络技术-HttpURLConnection
- 0913Android基础网络技术之下载(AsyncTask)
- 0911Android基础网络技术之WebView控件
- 0914Android基础网络技术之XUtils
- Android基础之十七使用网络技术
- Android网络技术之HttpURLConnection
- Android之使用网络技术
- Android之网络技术
- Android网络技术之WebView
- Android网络技术之HttpURLConnection
- Android之网络技术
- 0912Android基础网络技术之Http协议访问网络
- Android中的网络技术基础用法
- Android网络技术之WebView控件
- Android网络技术之OkHttp框架
- 网络技术基础
- Android Volley使用之一:Volley基础用法
- 表格和列表
- lufylegend学习笔记之三
- 浏览器访问网页的详细内部过程
- 【C++】写时拷贝COW
- SQL Server 2012 AlwaysOn高可用配置之八:新建可用性组
- 0913Android基础网络技术之Volley
- 0913Android基础网络技术之下载(AsyncTask)
- gradle--第九章 快速开始Groovy
- Android 网络通信——Volley
- linux设置默认从字符界面启动
- Hashtable&HashMap
- 我用闲言碎语,脱掉了你的外衣。
- 【读书笔记】iOS-对象初始化
- 基本常识