OkHttpUtil
package jp.co.gunmabank.util import android.os.Handler
import android.os.Looper
import com.google.gson.Gson
import com.google.gson.JsonParseException
import com.google.gson.internal.`$Gson$Types`
import com.squareup.okhttp.*
import io.fabric.sdk.android.services.common.AbstractSpiCall.DEFAULT_TIMEOUT
import jp.co.gunmabank.minefocus.BuildConfig
import java.io.IOException
import java.lang.reflect.ParameterizedType
import java.lang.reflect.Type
import java.net.CookieManager
import java.net.CookiePolicy
import java.net.Proxy
import jp.co.gunmabank.util.TrustAllCerts
import java.security.SecureRandom
import java.util.concurrent.TimeUnit
import javax.net.ssl.*
import javax.xml.datatype.DatatypeConstants.SECONDS
import io.fabric.sdk.android.services.settings.IconRequest.build
import com.squareup.okhttp.RequestBody
import jp.co.gunmabank.common.Common
import io.fabric.sdk.android.services.settings.IconRequest.build
import io.fabric.sdk.android.services.settings.IconRequest.build /**
* 非同時OkHttpのフォームに基づいてを提出 * Created by wangsai on 2017/05/12.
*/ object OkHttpUtil { private var mOkHttpClient: OkHttpClient
private val mDelivery: Handler
private val mGson: Gson
private var mInstance: OkHttpUtil? = null init {
mOkHttpClient = OkHttpClient()
//cookie enabled
mOkHttpClient.cookieHandler = CookieManager(null, java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER) mDelivery = Handler(Looper.getMainLooper())
mGson = Gson()
if (mInstance == null) {
synchronized(OkHttpUtil::class.java) {
if (mInstance == null) {
mInstance = OkHttpUtil
}
}
}
} /**
* 非同時OkHttpのフォームに基づいてを提出 * @param url
* *
* @param callback
* *
* @param sendData
* *
* @throws IOException
*/
@Throws(IOException::class)
private fun postFormDataAsyn(url: String, callback: ResultCallback<*>, sendData: String, sendLinkData: String, name: String, linkname: String) {
val request = buildMultipartFormRequest(url, sendData, sendLinkData, name, linkname)
deliveryResult(callback, request)
} @Throws(IOException::class)
private fun postJsonDataAsyn(url: String, callback: ResultCallback<*>, sendData: String) {
val request = buildPostJosnRequest(url, sendData)
deliveryResult(callback, request)
} /**
* データを整理 * @param url
* *
* @param sendData
* *
* @return
*/
private fun buildMultipartFormRequest(url: String, sendData: String, sendLinkData: String, name: String, linkname: String): Request {
var boundary = "--AlamofireBoundary" + Common.randomFor4Num(8)
val builder = MultipartBuilder(boundary).type(MultipartBuilder.FORM)
builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + name + "\""), RequestBody.create(MediaType.parse("application/json; charset=utf-8"), sendData))
builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + linkname + "\""), RequestBody.create(MediaType.parse("application/json; charset=utf-8"), sendLinkData))
val requestBody = builder.build()
return Request.Builder().url(url).post(requestBody).build()
} private fun buildPostJosnRequest(url: String, sendData: String): Request { val request = Request.Builder().url(url).post(RequestBody.create(
MediaType.parse("application/json; charset=utf-8"),
sendData)).build()
return request
} /**
* 結果を処理 * @param callback
* *
* @param request
*/
private fun deliveryResult(callback: ResultCallback<*>, request: Request) {
var dnpSendmsg = ""
mOkHttpClient.newCall(request).enqueue(object : Callback {
override fun onFailure(request: Request, e: IOException) {
dnpSendmsg = request.tag().toString()
sendFailedStringCallback(dnpSendmsg, request, e, callback)
} override fun onResponse(response: Response) {
try {
val str = response.body().string()
if (callback.mType === String::class.java) {
sendSuccessResultCallback(str, callback)
} else {
//TODO mGson
}
} catch (e: IOException) {
sendFailedStringCallback(dnpSendmsg, response.request(), e, callback)
} catch (e: JsonParseException) {
sendFailedStringCallback(dnpSendmsg, response.request(), e, callback)
} }
})
} private fun sendFailedStringCallback(dnpSendmsg: String, request: Request, e: Exception, callback: ResultCallback<*>) {
mDelivery.post {
callback?.onError(dnpSendmsg, request, e)
}
} private fun sendSuccessResultCallback(any: String, callback: ResultCallback<*>) {
mDelivery.post {
callback?.onResponse(any)
}
} abstract class ResultCallback<T> {
internal var mType: Type init {
mType = getSuperclassTypeParameter(javaClass)
} abstract fun onError(dnpSendmsg: String, request: Request, e: Exception) abstract fun onResponse(str: String) companion object { internal fun getSuperclassTypeParameter(subclass: Class<*>): Type {
val superclass = subclass.genericSuperclass
if (superclass is Class<*>) {
throw RuntimeException("Missing type parameter.")
}
val parameterized = superclass as ParameterizedType
return `$Gson$Types`.canonicalize(parameterized.actualTypeArguments[0])
}
}
} /**
* 非同時OkHttpのフォームに基づいてを提出 * @param url
* *
* @param callback
* *
* @param sendData
* *
* @throws IOException
*/
fun postFormAsyn(url: String, callback: ResultCallback<*>, sendData: String, sendLinkData: String, name: String, linkname: String) {
mOkHttpClient = OkHttpClient() mOkHttpClient.setConnectTimeout(100, TimeUnit.SECONDS)
mOkHttpClient.setReadTimeout(100, TimeUnit.SECONDS)
//cookie enabled
mOkHttpClient.cookieHandler = CookieManager(null, java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER)
mInstance!!.postFormDataAsyn(url, callback, sendData, sendLinkData, name, linkname)
} /**
* 非同時OkHttpのフォームに基づいてを提出 * @param url
* *
* @param callback
* *
* @param sendData
* *
* @throws IOException
*/
fun postFormAsynForAUth(url: String, callback: ResultCallback<*>, sendData: String, sendLinkData: String, name: String, linkname: String, usename: String, usepassword: String) {
mOkHttpClient = OkHttpClient()
if (BuildConfig.FLAVOR == "stg" || BuildConfig.FLAVOR == "jp") {
mOkHttpClient.authenticator = object : Authenticator {
override fun authenticate(proxy: Proxy?, response: Response?): Request {
val credential = Credentials.basic(usename, usepassword)
return response!!.request().newBuilder()
.header("Authorization", credential)
.build()
} override fun authenticateProxy(proxy: Proxy?, response: Response?): Request? {
return null
}
}
mOkHttpClient.sslSocketFactory = createSSLSocketFactory()
mOkHttpClient.hostnameVerifier = HostnameVerifier { hostname, session -> true }
}
mOkHttpClient.setConnectTimeout(100, TimeUnit.SECONDS)
mOkHttpClient.setReadTimeout(100, TimeUnit.SECONDS)
mOkHttpClient.setWriteTimeout(100, TimeUnit.SECONDS)
//cookie enabled
mOkHttpClient.cookieHandler = CookieManager(null, java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER)
mInstance!!.postFormDataAsyn(url, callback, sendData, sendLinkData, name, linkname)
} fun postJsonAsynForAUth(url: String, callback: ResultCallback<*>, sendData: String, usename: String, usepassword: String) {
mOkHttpClient = OkHttpClient()
if (BuildConfig.FLAVOR == "stg" || BuildConfig.FLAVOR == "jp") {
mOkHttpClient.authenticator = object : Authenticator {
override fun authenticate(proxy: Proxy?, response: Response?): Request {
val credential = Credentials.basic(usename, usepassword)
return response!!.request().newBuilder()
.header("Authorization", credential)
.build()
} override fun authenticateProxy(proxy: Proxy?, response: Response?): Request? {
return null
}
} mOkHttpClient.sslSocketFactory = createSSLSocketFactory()
mOkHttpClient.hostnameVerifier = HostnameVerifier { hostname, session -> true }
}
mOkHttpClient.setConnectTimeout(600, TimeUnit.SECONDS)
mOkHttpClient.setReadTimeout(600, TimeUnit.SECONDS)
mOkHttpClient.setWriteTimeout(600, TimeUnit.SECONDS)
//cookie enabled
mOkHttpClient.cookieHandler = CookieManager(null, java.net.CookiePolicy.ACCEPT_ORIGINAL_SERVER)
mInstance!!.postJsonDataAsyn(url, callback, sendData)
} private fun createSSLSocketFactory(): SSLSocketFactory? {
var ssfFactory: SSLSocketFactory? = null try {
val sc = SSLContext.getInstance("TLS")
sc.init(null, arrayOf<TrustManager>(TrustAllCerts()), SecureRandom()) ssfFactory = sc.socketFactory
} catch (e: Exception) {
} return ssfFactory
}
}
OkHttpUtil的更多相关文章
- OKHttpUtil工具类
导入jar包下载链接 http://square.github.io/okhttp/ package com.common.util; import java.io.IOException; impo ...
- 简单的OkHttp使用介绍
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- OkHttp使用教程
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- 关于okhttp
本文出处:http://www.tuicool.com/articles/rArq63u 为什么需要一个HTTP库 Android系统提供了两种HTTP通信类,HttpURLConnection和Ht ...
- OkHttp使用介绍
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4001708.html 为什么需要一个HTTP库 Androi ...
- OkHttp使用全解析(转)。
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- OkHttp 源码分析
在工作中用到封装HTTP传输的OkHTTP,OkHttp是相对成熟的解决方案,同时也是开源项目.本文将从源码角度看下OkHttp是如何实现一些网络操作的. HTTP GET: OkHttpClient ...
- android 中对于采用okhttp时获取cookie并放入webview实现跳过登陆显示页面的功能
最近项目需要将网页的一些信息展示到app当中,由于采用的是okhttp进行网络的访问,并采用了cookie对于每次的访问请求都做了验证,所以在加入webview显示网页的时候会需要进行一下验证,为了跳 ...
- 如何使用MVP模式搭建我们的Android应用?
听到很多人在讨论MVVM,我自己早些时候也写过一篇介绍MVVM的文章(玩转Android之MVVM开发模式实战,炫酷的DataBinding!),实际上,在Android开发领域中,除了MVVM之外, ...
随机推荐
- bin&sbin 命令作用
最近需要了解sbin与bin的功能,需要整理一下.一下全部为Ubuntu14里面默认安装的.在这里收集一下,转载请注明出处! bin bash shell bunzip2 .bz2文件的解压缩程序. ...
- ARM指令解析
今天我来总结一下arm指令的学习,今天我不会对所有的arm指令进行一一的解析,在这里希望大家去看arm汇编手册,这个手册的中文版我放在了http://download.csdn.net/detail/ ...
- [Ubuntu]清除系统磁盘垃圾
操作步骤: 1.sudo apt-get autoremove(卸载系统中所有未被使用的依赖关系) 2.sudo apt-get clean(清除所有缓存的包文件) 以上操作绿色无害,对系统无影响.
- Java jar包查询下载方法
做过java开发的工程师,对java应用所需jar包一定不会陌生.特别是有需要搭建开发环境时,对各种jar包的需求量就会很大. 如何快速的找到自己想要的jar包,是蛮多java工程师所面临的一个难题. ...
- python super详解
一.super() 的入门使用 - 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能, 这时,我们就需要调用父类的方法了,可通过使用 super 来实 ...
- lua_to_luac
#!/bin/sh `rm -rf allLua.zip` `mkdir ./tempScripts` `mkdir ./tempScripts/scripts` `cp -a ./scripts/ ...
- ubuntu16 安装elasticsearch6.3问题
1.ubuntu16 安装elasticsearch6.3 elasticsearch 6.3需要的java的版本是1.8以上 安装java1.8 详见本博客的安装java https://www.c ...
- HDOJ4550 卡片游戏 随便销毁内存的代价就是wa//string类的一些用法
思路 标记最小的最后的位置 放在第一位 标记位置之前按left值小的左方大的右方 标记位置之后按顺序放在最后 不多说先贴上销毁内存的wa代码 销毁内存的wa代码 #include<cstdio ...
- java HttpServletRequest 重复流读取
在用reset接口的时候,常常会使用request.getInputStream()方法,但是流只能读取一次,一旦想要加上一个过滤器用来检测用户请求的数据时就会出现异常. 在过滤器中通过流读取出用 ...
- ubuntu 升级到5.1kernel,打开bbr
apt-get -f install wget -c https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.1/linux-headers-5.1.0-0 ...