android okvolley框架搭建
最近新出了很多好东西都没时间去好好看看,现在得好好复习下了,记下笔记
记得以前用的框架是android-async-http,volley啊,或者其它的,然后后面接着又出了okhttp,retrofit,rxjava很多新东西,有句话说的好啊,我不是程序员,我只是github上面的搬运工,出了这么多东西肯定会有很多人学习然后发表文章的,自己就去学习了下,因为以前用的是volley,所以就没去用retrofit了,因为volley也支持okhttp了,至于为什么要用okhttp就不多说了,毕竟不是大牛,只供小白学习,代码就是最好的老师啊,接下来就是用的okhttp和volley结合使用的框架体了。
接口请求类
public class OkVolleyService {
public interface ClientCallback {
void onSuccess(Object data);
void onFailure(Exception e);
void onError(Exception e);
}
public static void Login(String userID, String password, Context context,
final ClientCallback callback) {
String token = AuthFactory.encryptPassword(userID);
Map<String, String> params = new HashMap<>();
params.put("token", token);
params.put("userName", userID);
params.put("userPassword", password);
RequestManager.PostString("/doctor/login.do", context, params,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
UsersEntity entity = null;
try {
entity = UsersEntity.parse(response);
} catch (Exception e) {
e.printStackTrace();
callback.onError(e);
}
callback.onSuccess(entity);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callback.onFailure(error);
}
});
};
}
public class HTTPSTrustManager implements X509TrustManager{
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[] {};
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
// To change body of implemented methods use File | Settings | File
// Templates.
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
// To change body of implemented methods use File | Settings | File
// Templates.
}
public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}
public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}
public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
// TODO Auto-generated method stub
return true;
}
});
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[] { new HTTPSTrustManager() };
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
}
/**
* A HttpStack implement witch can verify specified self-signed certification.
* 验证指定的自签名证书。
*/
public class SelfSignSslOkHttpStack extends HurlStack { private OkHttpClient okHttpClient; /**
* Create a OkHttpStack with default OkHttpClient.
* 创建一个默认的okhttpclient okhttpstack。
*/
public SelfSignSslOkHttpStack() {
this(new OkHttpClient());
} /**
* Create a OkHttpStack with a custom OkHttpClient 创建一个自定义的okhttpclient okhttpstack
* @param okHttpClient Custom OkHttpClient, NonNull
*/
public SelfSignSslOkHttpStack(OkHttpClient okHttpClient) {
this.okHttpClient = okHttpClient;
} @Override
protected HttpURLConnection createConnection(URL url) throws IOException {
if ("http".equals(url.getProtocol())) {//如果请求是https请求那么就信任所有SSL,此处作了修改,无论是不是https都信任 HttpURLConnection connection = new OkUrlFactory(okHttpClient).open(url);
// SSLSocketFactory ssl = HTTPSTrustManager.allowAllSSL();
// connection.setSSLSocketFactory(ssl);
return connection;
} else {
return new OkUrlFactory(okHttpClient).open(url);
}
} }
请求管理类
public class RequestManager {
private static final String TAG = "RequestManager";
private static int SOCKET_TIMEOUT = 6 * 10 * 100;
private static RequestManager instance;
private Map<String, SSLSocketFactory> socketFactoryMap;
public static RequestManager getInstance(Context context) {
if (instance == null) {
instance = new RequestManager(context);
}
return instance;
}
public RequestQueue mRequestQueue;
// private OkHttpClient okHttpClient;
private BitmapLruCache mLruCache;
private ImageLoader mImageLoader;
private DiskBasedCache mDiskCache;
private RequestManager(Context context) {
int MEM_CACHE_SIZE = 1024 * 1024
* ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass() / 3;
// okHttpClient = new OkHttpClient();
mLruCache = new BitmapLruCache(MEM_CACHE_SIZE);
mRequestQueue = newRequestQueue(context.getApplicationContext());
mImageLoader = new ImageLoader(mRequestQueue, mLruCache);
mDiskCache = (DiskBasedCache) mRequestQueue.getCache();
}
private SSLSocketFactory createSSLSocketFactory(Context context, int res, String password)
throws CertificateException,
NoSuchAlgorithmException,
IOException,
KeyStoreException,
KeyManagementException {
InputStream inputStream = context.getResources().openRawResource(res);
KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(inputStream, password.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, tmf.getTrustManagers(), new SecureRandom());
return sslContext.getSocketFactory();
}
/**使用Volley首先需要获取到一个RequestQueue对象**/
private RequestQueue newRequestQueue(Context context) {
RequestQueue requestQueue;
try {
// String[] hosts = {CommonConfig.BASE_API};
// int[] certRes = {R.raw.kyfw};
// String[] certPass = {"asdfqaz"};
// socketFactoryMap = new Hashtable<>(hosts.length);
// for (int i = 0; i < certRes.length; i++) {
// int res = certRes[i];
// String password = certPass[i];
// SSLSocketFactory sslSocketFactory = createSSLSocketFactory(context, res, password);
// socketFactoryMap.put(hosts[i], sslSocketFactory);
// }
//用OKHttp替换HttpURLConnection作为传输层
HurlStack stack = new SelfSignSslOkHttpStack();
requestQueue = Volley.newRequestQueue(context, stack);
requestQueue.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
return requestQueue;
}
public void addRequest(Request request, Object tag) {
if (BuildConfig.DEBUG) {
Log.i(TAG, "Add request:" + request.toString());
}
if (tag != null) {
request.setTag(tag);
}
mRequestQueue.add(request);
}
public void cancelAll(Object tag) {
mRequestQueue.cancelAll(tag);
}
public File getCachedImageFile(String url) {
return mDiskCache.getFileForKey(url);
}
public Bitmap getMemoryBitmap(String key) {
return mLruCache.get(key);
}
public ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener) {
return loadImage(requestUrl, imageListener, 0, 0);
}
public ImageLoader.ImageContainer loadImage(String requestUrl,
ImageLoader.ImageListener imageListener,
int maxWidth,
int maxHeight) {
return mImageLoader.get(requestUrl, imageListener, maxWidth, maxHeight);
}
/**post请求**/
public static void PostString(String url, Context context,
final Map<String, String> pams, Response.Listener<String> listener,
Response.ErrorListener errListener) {
url = getAbsoluteUrl(url);
HTTPSTrustManager.allowAllSSL();
StringRequest request = new StringRequest(
Request.Method.POST,
url,
listener,
errListener
)
{
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
// TODO Auto-generated method stub
return BaseApplication.getApplication()
.getHeaderparams();
}
@Override
public RetryPolicy getRetryPolicy() {
// TODO Auto-generated method stub
RetryPolicy retryPolicy = new DefaultRetryPolicy(
SOCKET_TIMEOUT, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
return retryPolicy;
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return pams;
}
};
// mRequestQueue.cancelAll();
// volley.jar
RequestManager.getInstance(context).addRequest(request, context);
}
private static String getAbsoluteUrl(String relativeUrl) {
return CommonConfig.BASE_API + relativeUrl;
}
}
ui请求
private void login(){
OkVolleyService.Login("xxxxxxxx", "123", context, new OkVolleyService.ClientCallback() {
@Override
public void onSuccess(Object data) {
UsersEntity rEntity = (UsersEntity) data;
if (rEntity.reqResult.equals("success")) {
final UserEntity entity = rEntity.getData();
if (entity != null)
startActivity(new Intent(context, MainActivity.class));
}
}
@Override
public void onFailure(Exception e) {
Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Exception e) {
Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
学习笔记,只供参考,此处还可以优化,比如把网络回调去掉,改用rxandroid
android okvolley框架搭建的更多相关文章
- 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)
android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比 转载请注明http://w ...
- android应用框架搭建------BaseActivity
网上有很多介绍BaseActivity的博文,多数是从应用的角度去描述的. 这里,我所介绍的BaseActivity不同,主要从框架搭建的角度去介绍BaseActivity的使用. 先看代码: /** ...
- 1、Android项目框架搭建 (分析需求、整理资料)
闲来无事.想搭个框架试试 分析一般应用 将资料整理整理 粗略统计 须要下面资料 1.android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.Vi ...
- android studio 框架搭建:加入注解框架Annotations
参考github上的demo,新建一个project后,会有一个位于app文件夹下的局部build.gradle文件和一个位于根目录project下的全局build.gradle文件,我们要修改的是局 ...
- [转]Android Studio 里搭建自动化测试框架Robotium
Android的自动化测试框架可选择的不多,后来选了Robotium(https://code.google.com/p/robotium/),它的语法及易用性挺像我们用在iOS里的KIF. 官方文档 ...
- Android绘图机制(四)——使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美
Android绘图机制(四)--使用HelloCharts开源框架搭建一系列炫酷图表,柱形图,折线图,饼状图和动画特效,抽丝剥茧带你认识图表之美 这里为什么不继续把自定义View写下去呢,因为最近项目 ...
- Retrofit2.0+RxJava+Dragger2实现不一样的Android网络架构搭建
Tamic :csdn http://blog.csdn.net/sk719887916 众所周知,手机APP的核心就在于调用后台接口,展示相关信息,方便我们在手机上就能和外界交互.所以APP中网络框 ...
- 基于Retrofit2.0+RxJava+Dragger2实现不一样的Android网络构架搭建(转载)
转载请注明出处:http://blog.csdn.net/finddreams/article/details/50849385#0-qzone-1-61707-d020d2d2a4e8d1a374a ...
- 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment
仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...
随机推荐
- 二叉树的递归实现(java)
这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
- Linux学习日记-MVC的部署(三)
一.Mvc与wcf 相对WCF的部署MVC还是有点麻烦,我们要考虑哪些dll是不需要的,哪些是要拷贝到本地的. 而WCF因为有些配置文件不支持,我们只需要在配置wcf时不使用配置文件而直接使用代码就行 ...
- 凭吊一下ASP.NET 5,然后跨平台,越跨越开心
ASP.NET 5 is dead ASP.NET 5在今年早些时候被宣判死刑了.但是这并不影响我们之前在ASP.NET 5乃至ASP.NET MVC平台上的经验累积--没错,微软改名部门又立功了!他 ...
- C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
系列文章 C#开发奇技淫巧一:调试windows系统服务 C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件 C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁 程序目录的整理 ...
- 【MSP是什么】MSP认证之项目群管理学习总结
首先要说的是,我这篇体会是针对一定的背景的,不能算是一种通用的管理方式,只能是我自己的经验总结,能给大家平常的管理提供一点思路,我就很满足了.先说说背景,我所在公司做的是大型桌面应用软件,简单点说就是 ...
- UML
UML:1.继承关系用空心三角形+实线来表示2.实现接口用空心三角形+虚线来表示3.关联关系用实线箭头来表示4.依赖关系用虚线箭头来表示5.聚合关系用空心菱形+实线箭头来表示6.组合关系用实心菱形+实 ...
- SQL Server 合并复制遇到identity range check报错的解决
最近帮一个客户搭建跨洋的合并复制,由于数据库非常大,跨洋网络条件不稳定,因此只能通过备份初始化,在初始化完成后向海外订阅端插入数据时发现报出如下错误: Msg 548, Level 16, S ...
- 3. SVM分类器求解(1)——Lagrange duality
先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题: 目标函数是f(w),下面是等式约束.通常解法是引入拉格朗日算子,这里使用来表示算子,得到拉格朗日公式为 是等式约束 ...
- 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树
这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...
- ArrayAdapter
Android Adapter:ArrayAdapter篇 版权声明:本文为博主原创文章,未经博主允许不得转载.微博:厉圣杰源码:AndroidDemo/Notification文中如有纰漏,欢迎大家 ...