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