Android 使用改型获取错误onFailure:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed
将OkHttpClient对象添加到改装中时出错 错误为:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed 这是我的代码:Android 使用改型获取错误onFailure:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed,android,retrofit,Android,Retrofit,将OkHttpClient对象添加到改装中时出错 错误为:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed 这是我的代码: public static OkHttpClient getUnsafeOkHttpClient() { try { File mFolder = new File(Environment.getExternalStorageDirectory()
public static OkHttpClient getUnsafeOkHttpClient() {
try {
File mFolder = new File(Environment.getExternalStorageDirectory() + "/certificate");
if (!mFolder.exists())
{
mFolder.mkdir();
}
String fileName = "certificate1a.cer";
File file = new File(mFolder, fileName);
FileInputStream fis = null;
fis = new FileInputStream(file);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate ca = cf.generateCertificate(fis);
// Create a KeyStore containing our trusted CAs
String keyStoreType = KeyStore.getDefaultType();
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(null, null);
keyStore.setCertificateEntry("ca", ca);
// Create a TrustManager that trusts the CAs in our KeyStore
String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(keyStore);
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("TSL");
sslContext.init(null, tmf.getTrustManagers(),null);
// Create an ssl socket factory with our all-trusting manager
final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setSslSocketFactory(sslSocketFactory);
okHttpClient.interceptors().add(new APIRequestInterceptor());
okHttpClient.interceptors().add(new APIResponseInterceptor());
okHttpClient.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession sslSession) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
Log.e("hey", "inside this");
Log.e("HOST VERIFIER", hv.toString());
Log.e("HOST NAME", hostname);
return hv.verify("aviatesoftware.in", sslSession);
}
});
return okHttpClient;
} catch (Exception e) {
Log.e("error while getting ","unsafeOkHttpClient "+e.toString());
}
return null;
}
public static <S> S createService(Class<S> serviceClass) {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(getUnsafeOkHttpClient())
.build();
return retrofit.create(serviceClass);
}
GetInterface obj = createService(GetTaxInterface.class);
Call<Abc> call = obj.getAbc("555555555555");
call.enqueue(new Callback<Abc>() {
@Override
public void onResponse(Response<Abc> response, Retrofit retrofit) {
Log.e("Asynchronous response", response.toString());
Abc temp = response.body();
Log.e("tax object", temp.toString());
Toast.makeText(getApplicationContext(),"Retrofit Asynchonus Simple try successful",Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(Throwable t) {
Log.e("on Failure", t.toString());
Toast.makeText(getApplicationContext(),"Retrofit Asynchonus Simple try failed",Toast.LENGTH_SHORT).show();
}
});
publicstaticokhttpclient getUnsafeOkHttpClient(){
试一试{
File mFolder=新文件(Environment.getExternalStorageDirectory()+“/certificate”);
如果(!mFolder.exists())
{
mkdir();
}
字符串fileName=“certificate1a.cer”;
文件=新文件(mFolder,文件名);
FileInputStream fis=null;
fis=新文件输入流(文件);
CertificateFactory cf=CertificateFactory.getInstance(“X.509”);
证书ca=cf.generateCertificate(fis);
//创建包含可信CA的密钥库
字符串keyStoreType=KeyStore.getDefaultType();
KeyStore KeyStore=KeyStore.getInstance(keyStoreType);
load(null,null);
密钥库设置认证尝试(“ca”,ca);
//创建信任密钥库中CA的信任管理器
字符串tmfAlgorithm=TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf=TrustManagerFactory.getInstance(tmfAlgorithm);
tmf.init(密钥库);
//安装所有信任管理器
最终SSLContext SSLContext=SSLContext.getInstance(“TSL”);
init(null,tmf.getTrustManager(),null);
//使用我们的全信任管理器创建ssl套接字工厂
最终SSLSocketFactory SSLSocketFactory=sslContext.getSocketFactory();
OkHttpClient OkHttpClient=新的OkHttpClient();
okHttpClient.SetssSocketFactory(sslSocketFactory);
okHttpClient.interceptors().add(新的APIRestInterceptor());
okHttpClient.interceptors().add(新的APIResponseInterceptor());
okHttpClient.setHostnameVerifier(新的HostnameVerifier(){
@凌驾
公共布尔验证(字符串主机名、SSLSession SSLSession){
HostnameVerifier hv=HttpsURLConnection.getDefaultHostnameVerifier();
Log.e(“嘿”,“在这里面”);
Log.e(“主机验证器”,hv.toString());
Log.e(“主机名”,主机名);
返回hv.verify(“aviatesoftware.in”,sslSession);
}
});
返回okHttpClient;
}捕获(例外e){
Log.e(“获取时出错”,“unsafeOkHttpClient”+e.toString());
}
返回null;
}
公共静态S createService(类serviceClass){
改装改装=新改装.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(getUnsafeOkHttpClient())
.build();
返回改装。创建(serviceClass);
}
GetInterface obj=createService(GetTaxInterface.class);
Call Call=obj.getAbc(“5555”);
call.enqueue(新回调(){
@凌驾
公共响应(响应、改装){
Log.e(“异步响应”,response.toString());
Abc temp=response.body();
Log.e(“税务对象”,temp.toString());
Toast.makeText(getApplicationContext(),“改装Asynchonus Simple try successful”,Toast.LENGTH_SHORT).show();
}
@凌驾
失效时的公共无效(可丢弃的t){
Log.e(“失败时”,t.toString());
Toast.makeText(getApplicationContext(),“改装异步简单尝试失败”,Toast.LENGTH_SHORT).show();
}
});
我有下面的梯度文件
- 编译'com.squareup.Reformation:Reformation:2.0.0-beta2'
- 编译'com.squareup.Reformation:converter gson:2.0.0-beta2'
- 编译'com.squareup.okhttp:okhttp:2.7.0'
出于安全目的,我必须使用getUnsafeOkHttpClient()。有人能告诉我哪里做错了吗?请注意,改型2的网络操作依赖于OkHttp,因此,一旦添加了改型2,就不需要显式添加OkHttp依赖项。我相信这可能会导致版本冲突 编辑:将beta 3用于改装和gson
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta3'
compile 'com.squareup.retrofit2:retrofit-converters:2.0.0-beta3'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3
compile'com.squareup.reformation:converter-gson:2.0.0-beta3'
和compile'com.squareup.okhttp3:okhttp:3.0.1'
我尝试了这两种方法。我把一些日志放进了拦截器。我在okhttp3中添加了拦截器,但它没有执行拦截器和hostverifyName@IntelliJAmiya