最近新出了很多好东西都没时间去好好看看,现在得好好复习下了,记下笔记
记得以前用的框架是android-async-http,volley啊,或者其它的,然后后面接着又出了okhttp,retrofit,rxjava很多新东西,有句话说的好啊,我不是程序员,我只是github上面的搬运工,出了这么多东西肯定会有很多人学习然后发表文章的,自己就去学习了下,因为以前用的是volley,所以就没去用retrofit了,因为volley也支持okhttp了,至于为什么要用okhttp就不多说了,毕竟不是大牛,只供小白学习,代码就是最好的老师啊,接下来就是用的okhttp和volley结合使用的框架体了。
接口请求类
images/loading.gif' data-original="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" />
1 public class OkVolleyService { 2 3 public interface ClientCallback { 4 void onSuccess(Object data); 5 6 void onFailure(Exception e); 7 8 void onError(Exception e); 9 }10 11 public static void Login(String userID, String password, Context context,12 final ClientCallback callback) {13 14 String token = AuthFactory.encryptPassword(userID);15 Map<String, String> params = new HashMap<>();16 params.put("token", token);17 params.put("userName", userID);18 params.put("userPassword", password);19 RequestManager.PostString("/doctor/login.do", context, params,20 new Response.Listener<String>() {21 @Override22 public void onResponse(String response) {23 UsersEntity entity = null;24 try {25 entity = UsersEntity.parse(response);26 } catch (Exception e) {27 e.printStackTrace();28 callback.onError(e);29 }30 callback.onSuccess(entity);31 }32 }, new Response.ErrorListener() {33 @Override34 public void onErrorResponse(VolleyError error) {35 callback.onFailure(error);36 }37 });38 39 };40 41 }
View Code
支持https和
网络请求类
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()); }}
View Code
/** * 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); } }}
View Code
请求管理类
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; }}
View Code
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(); } }); }
View Code
学习笔记,只供参考,此处还可以优化,比如把网络回调去掉,改用rxandroid
原标题:android okvolley框架搭建
关键词:Android