Android 使用改型获取错误onFailure: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()

OkHttpClient对象添加到改装中时出错

错误为:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed

这是我的代码

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'
使用以上代码,我得到的错误是 失败时:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed

我试过下面这样的组合

如果我只是使用OkHttpClient-OkHttpClient=new-OkHttpClient()而不是getUnsafeOkHttpClient()

并将此okhttpclient对象添加到改装中,如.client(okhttpclient)而不是.client(getUnsafeOkHttpClient())我没有收到任何错误。它将执行onResponse()


出于安全目的,我必须使用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