Android 网络通信框架Volley
来源:互联网 发布:underscore.js 编辑:程序博客网 时间:2024/05/01 10:27
Volley的架构设计
Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。
Volley使用了线程池来作为基础结构,主要分为主线程,cache线程和network线程。
主线程和cache线程都只有一个,而NetworkDispatcher线程可以有多个,这样能解决比并行问题。如下图:
原理图:
volley例子
效果图:
步骤: 1,写一个layout(activity_volley)
2,写一个单例MySingleton
3,写一个VolleyActivity(1. 创建一个RequestQueue对象。
创建一个StringRequest对象。
将StringRequest对象添加到RequestQueue里面。)
4,在AndroidMainfest里添加权限
1,写一个layout
activity_volley
><?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"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.android.volley.toolbox.NetworkImageView android:id="@+id/netImage" android:layout_width="wrap_content" android:layout_height="wrap_content" > </com.android.volley.toolbox.NetworkImageView> <Button android:id="@+id/button_getimage" android:text="得到图片" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/button_connect" android:text="连接网络" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/textview_volley" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout></ScrollView>
2,写一个单例MySingleton
MySingleton.java
package com.example.administrator.networkmode.MyVolley;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; }}
3,写一个VolleyActivity(1. 创建一个RequestQueue对象。
创建一个StringRequest对象。
将StringRequest对象添加到RequestQueue里面。)
VolleyActivity
package com.example.administrator.networkmode.MyVolley;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;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 com.example.administrator.networkmode.R;import java.lang.ref.ReferenceQueue;import java.util.HashMap;import java.util.Map;/** * Created by Administrator on 2015/9/14. */public class VolleyActivity extends AppCompatActivity implements View.OnClickListener { private Button mBtVolley; private TextView mTextviewVolley; private NetworkImageView networkImageView; private Button mBtImageLoader; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_volley); mBtVolley= (Button) findViewById(R.id.button_connect); networkImageView= (NetworkImageView) findViewById(R.id.netImage); mBtImageLoader= (Button) findViewById(R.id.button_getimage); mTextviewVolley= (TextView) findViewById(R.id.textview_volley); mBtVolley.setOnClickListener(this); mBtImageLoader.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.button_getimage: networkImageView.setImageUrl("http://www.daxueit.com/upload/201408/13/101047281001237.png",MySingleton.getInstance(this).getImageLoader()); break; case R.id.button_connect: //RequestQueue是一个请求队列对象,它可以缓存所有的HTTP请求,然后按照一定的算法并发地发出这些请求。 RequestQueue queue= Volley.newRequestQueue(getApplicationContext()); //这里new出了一个StringRequest对象,StringRequest的构造函数需要传入四个参数, // 第一个参数是请求的方法,第二个参数就是目标服务器的URL地址,第三个参数是服务器响应成功的回调,第四个参数是服务器响应失败的回调。 // 其中,目标服务器地址我们填写的是百度的首页,然后在响应成功的回调里打印出服务器返回的内容,在响应失败的回调里返回一个Toast StringRequest request=new StringRequest(Request.Method.POST, "http://192.168.0.30:8080/MyWebTest/MyTestServerlet", new Response.Listener<String>() { @Override public void onResponse(String response) { mTextviewVolley.setText(response); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mTextviewVolley.setText("网络连接错误"); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { HashMap<String,String> map=new HashMap<>(); map.put("username","zhangsan"); return map; } }; MySingleton.getInstance(getApplicationContext()).addToRequestQueue(request); break; } }}
4,在AndroidMainfest里添加权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
使用volley前我们需要导入volley的jar包。
eclipse:下载jar包,复制到工程下的libs中即可。
studio:
法1:和eclipse一样把jar包放在libs下
法2:用studio直接下载:右击项目>open moudle settings>在Dependencies中搜索:volley,使用最新的版本,OK即可。
法3:导入源码包:file>右击import module >找到源码包路径>确定。 还需要导入module,在Dependencies>点击+号导入modul
stdio中导包的这种方式,也可以用来导入httpclient包,因为在android6.0中舍弃了httpclient,可以在6.0搜索:org.apache.http导入httpclient包即可。
- Android网络通信框架:Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android网络通信框架Volley
- Android 网络通信框架Volley
- android---(volley网络通信框架)
- Android Volley网络通信框架
- Android-Volley网络通信框架
- Android 网络通信框架Volley
- 【Android进阶】-Android 网络通信框架 Volley
- Android网络通信框架Volley详解
- Android轻网络通信框架--Volley
- Android网络通信框架Volley初体验
- Android 网络通信框架Volley学习
- WKWebView返回某个历史页面
- 高仿金山《电池医生》首页一键省电UI动画效果
- linux fcntl()函数
- Volley框架 xUtils 框架
- JS----简单的倒计时
- Android 网络通信框架Volley
- 在Xcode下编译cocos2d-x语言为lua时出错的解决方案
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解:
- 英语四级单词捡漏
- oracle锁表进程查看并强制关闭
- STL list remove和sort函数
- 微信企业号开发:微信考勤百度地图定位二
- 利用PLSQL Developer 数据库间表结构和数据对比
- opensmile读取wav出错:bogus wave/riff header or file in wrong format解决办法