2016-02-01 23 views
6

OkHttpClientオブジェクトを追加する際にエラーが発生しました。Retrofitを使用してエラーが発生しました。エラー:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:closed

エラーは次のとおりです。 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:

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(); 
       } 
      }); 

私はGradleのファイルの下に含まれています。ここ

を閉じマイコードです。

  • コンパイル 'com.squareup.retrofit:改造:2.0.0-beta2の'
  • コンパイル 'com.squareup.retrofit:コンバータ-gson:2.0.0-beta2の'
  • コンパイル「COM。 squareup.okhttp:com.google.gson.JsonSyntaxException::java.lang.IllegalStateException:私は失敗に でエラーを取得していますすべての上記のコードでは2.7.0'

:okhttpは

を閉じました

私は以下のようないくつかの組み合わせを試してみました。

私は単にOkHttpClient okhttpclient =新しいOkHttpClient()の代わりに、getUnsafeOkHttpClient()

を使用した場合、代わりに.clientの.client(okhttpclient)ように改造するこのokhttpclientオブジェクトを追加します(getUnsafeOkHttpClient ())私は何のエラーもありません。それは私が、セキュリティの目的のためにgetUnsafeOkHttpClient()を使用する必要がonResponse()

を実行します。誰が私が間違っているのか教えてくれますか? 2レトロフィット

+0

が ' ':コンバータ-gson 2.0.0-beta3''&'コンパイルcom.squareup.retrofit' をコンパイルします。 okhttp3:okhttp:3.0.1'' –

+1

私は両方のこれらを試してみました。私はいくつかのログをインターセプタに入れます。私はokhttp3にインターセプタを追加しましたが、それはインターセプタを実行してもhostverifyNameませんでした。 @IntelliJAmiya –

答えて

0

注は、そのネットワークの運用のためにOkHttpに依存しているそのため、あなたがretrofit2を追加した後、明示的に依存関係をOkHttp追加する必要はありません。私はそれがバージョンの競合を引き起こす可能性があると信じています。

編集は:com.squareupを使用換装し、gsonの両方のためのベータ3

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 
関連する問題