2016-04-11 11 views
3

Retrofit Libraryを初めて使用しています。私は複数のAPIコールを作成しなければならないアプリケーションに取り組んでいますが、この問題は私の最初のAPIコールを作成しようとしたときにスティックされます...2回エンロールする2回エンロールメソッド

私は、その後、onResponseメソッド内の機能が2倍...

を実行している非同期呼び出し方法は、これはできるだけ早く私が上でアプリケーションを実行すると、私は非同期APIコールを呼び出しています私のコード...

final ApiModule apiService = ApiServiceGenerator.createService(ApiModule.class); 
Call <ConfigResponse> call = apiService.getConfig(); 

call.enqueue(new Callback<ConfigResponse>() { 
    @Override 
    public void onResponse(Call<ConfigResponse> call, Response<ConfigResponse> response) { 
    try { 
     if (response.isSuccessful()) { 
      Log.e("MyTag", "This is running"); 
     } 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    @Override 
    public void onFailure(Call<ConfigResponse> call, Throwable t) { 
    e.printStackTrace(); 
    } 
}); 

ですデバイスと私のアンドロイドスタジオのロガーを見るとき、それは私にログメッセージを表示しています -

E/MyTag: This is running 
E/MyTag: This is running 

ここで2回走っているようですね!!

なぜ2回実行されているのか理解できません。 これで私を手伝ってください...

もっと助けてください... 私はこのようなコードを実装しました。 (私は私のAPIコールのURLを定義した)

ApiModuleインタフェース

public abstract interface ApiModule { 

    @GET("config") 
    Call<ConfigResponse> getConfig(); 

} 

ApiServiceGeneratorはこのように書きます -

public class ApiServiceGenerator { 

public static final String API_BASE_URL = "https://www.example.com/"; 
private static OkHttpClient httpClient = new OkHttpClient.Builder() 
     .addInterceptor(new Interceptor() { 
      @Override 
      public okhttp3.Response intercept(Chain chain) throws IOException { 
       Request newRequest = chain.request().newBuilder().addHeader("App-Secret", "some-secret-key").build(); 
       return chain.proceed(newRequest); 
      } 
     }) 
     .addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)) // Just For logging 
     .readTimeout(60, TimeUnit.SECONDS) 
     .connectTimeout(60, TimeUnit.SECONDS) 
     .build(); 

Gson gson = new GsonBuilder() 
     .registerTypeAdapterFactory(new ArrayAdapterFactory()) 
     .create(); 

private static Retrofit.Builder builder = 
     new Retrofit.Builder() 
       .baseUrl(API_BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().registerTypeAdapterFactory(new ArrayAdapterFactory()).create())); 

public static <S> S createService(Class<S> serviceClass) { 
    Retrofit retrofit = builder.client(httpClient).build(); 
    return retrofit.create(serviceClass); 
} 

public static Retrofit retrofit() { // For Error Handing when non-OK response is received from Server 
    OkHttpClient httpClient = new OkHttpClient.Builder().build(); 
    OkHttpClient client = httpClient; 
    return builder.client(client).build(); 
} 
} 

答えて

3

最後に、私は.. そのないレトロフィットライブラリの問題私の問題を解決.. !!

実際には私の悪いです。私はフラグメントを2回開きます(これは私がこの質問に答える前にわかりません)... フラグメント内のコードが2回実行されているため、レトロフィットレスポンスが2回実行されているように思えます...

+0

あります別の問題正確な問題に遭遇しましたが、エンキューコールが2回直接呼び出されていました。それでも他の直接的な原因は見当たらない。私はこのバージョン2.3.0のリリースを解決できる別の解決策を探しています。 – GFxJamal