編輯:關於android開發
最近新出了很多好東西都沒時間去好好看看,現在得好好復習下了,記下筆記
記得以前用的框架是android-async-http,volley啊,或者其它的,然後後面接著又出了okhttp,retrofit,rxjava很多新東西,有句話說的好啊,我不是程序員,我只是github上面的搬運工,出了這麼多東西肯定會有很多人學習然後發表文章的,自己就去學習了下,因為以前用的是volley,所以就沒去用retrofit了,因為volley也支持okhttp了,至於為什麼要用okhttp就不多說了,畢竟不是大牛,只供小白學習,代碼就是最好的老師啊,接下來就是用的okhttp和volley結合使用的框架體了。
接口請求類
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 @Override 22 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 @Override 34 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 Codeui請求
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 Studio SlidingMenu導入/配置 FloatMath找不到符號解決方法,studioslidingmenuSlidingMenu是一個第三方
Android SurfaceView的生命周期,androidsurfaceview本文利用SurfaceView來實現視頻的播放 本文地址:http://www.cn
Android:進程間通信交互 Intent 的 ComponentName 廣播-BroadcastReceiver ContentProvider AIDL In
Android專用Log開源項目——KLog 在Android開發和調試的過程中,Log的使用是非常頻繁的,一個好的Log工具可以幫你節省很多時間,所以凱子哥抽空寫了個
Android——eclipse下運行android項目報錯 Conve