我正在使用带有OKHTTP3客户端的Retrofit 1.9,我正在尝试添加认证固定.以下是相关代码:
String hostname = "xxxxxx.xx";
CertificatePinner certificatePinner = new CertificatePinner.Builder()
.add(hostname, "sha1/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=")
.build();
OkHttpClient client = new OkHttpClient.Builder()
.certificatePinner(certificatePinner)
.build();
return new RestAdapter.Builder()
.setRequestInterceptor(request -> {
request.addHeader("CONTENT-TYPE", "application/json");
})
.setEndpoint("https://xxxxxxxxxxxx").
.setClient(new Ok3Client(client))
.build();
Run Code Online (Sandbox Code Playgroud)
不幸的是它似乎没有用.我没有
"javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!"
Run Code Online (Sandbox Code Playgroud)
异常,甚至我的主机或SHA都不正确.有谁能解释为什么?
我有"类型的条件分支结果......是任意的隐形演员?" 当我尝试做这样的事情时发出警告:
objects?.forEach {
val gson = Gson()
val chatObject = if(it.type == CHAT_TEXT_TYPE) gson.fromJson(it.value, ChatText::class.java) //WARNING
else gson.fromJson(it.value, ChatProduct::class.java) //WARNING
//TEST
if(chatObject is ChatText) Log.e("ChatText: It works!", chatObject.text)
if(chatObject is ChatProduct) Log.e("ChatProduct: It works!", chatObject.name)
}
Run Code Online (Sandbox Code Playgroud)
但最后它的确有效.我的代码有什么问题吗?是否有可能删除此警告?
编辑(正如@Xavier Bouclet建议的那样 - 警告消失了)
val chatObject = when (it.type)
{
CHAT_TEXT_TYPE -> gson.fromJson(it.value, ChatText::class.java)
CHAT_PRODUCT_TYPE -> gson.fromJson(it.value, ChatProduct::class.java)
else -> gson.fromJson(it.value, Any::class.java)
}
Run Code Online (Sandbox Code Playgroud)