私のサーバーからの単純なデータリストを要求しています。私は改造を使用しており、Stethoをネットワークインターセプタとして設定してネットワークコールを監視しています。私の最初のネットワークコールが失敗した理由
あなたはクロムから、このスクリーンショットで見ることができるようにウィンドウを検査します。最初のネットワークコールの後に行ったすべてのネットワークコールは失敗し、自動的に2回目にサーバーを呼び出して成功します。ネットワークコールのコードは次のとおりです。ネットワーク呼び出し
public void getLocalAreasFromServer(int districtId) {
APIService service = ServiceGenerator.createService(APIService.class, this);
citiesListCall = service.getCitiesList(districtId);
citiesListCall.enqueue(new Callback<List<CityItem>>() {
@Override
public void onResponse(Call<List<CityItem>> call, Response<List<CityItem>> response) {
if (response.isSuccessful()) {
ArrayAdapter<CityItem> adapter = new ArrayAdapter<>(InsertAndUpdateAddressActivity.this,
android.R.layout.simple_spinner_dropdown_item, response.body());
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
localAreaSpinner.setAdapter(adapter);
if(hasExtra){
AddressTable address = getIntent().getParcelableExtra("selected_address");
for(CityItem cityObj: response.body()){
if(cityObj.getCity_name().equals(address.getLocalArea())){
localAreaSpinner.setSelection(adapter.getPosition(cityObj));
}
}
}
}
}
@Override
public void onFailure(Call<List<CityItem>> call, Throwable t) {
t.getStackTrace();
}
});
}
APIサービスインターフェイス
public interface APIService {
@GET("get_cities_list")
Call<List<CityItem>> getCitiesList(@Query("district_id") int district_id);
}
ServiceGenerator
クラス
public class ServiceGenerator {
private static final String BASE_URL = "https://www.baseURL.com/mobile/";
private static OkHttpClient.Builder httpClient =
new OkHttpClient.Builder()
.addNetworkInterceptor(new StethoInterceptor())
.connectTimeout(30,TimeUnit.SECONDS)
.readTimeout(30,TimeUnit.SECONDS)
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request original = chain.request();
Request request = original.newBuilder()
.header("Authorization", "Basic cmdkZXY6cmcxMjM=")
.method(original.method(), original.body())
.build();
return chain.proceed(request);
}
});
private static Retrofit.Builder builder =
new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder().serializeNulls().create()))
.client(httpClient.build());
private static Retrofit retrofit = builder.build();
public static <S> S createService(Class<S> serviceClass, Context context) {
Stetho.initializeWithDefaults(context);
return retrofit.create(serviceClass);
}
}
ため
機能
私はデバッグしようとしましたが、決してonFailure
メソッドには到着しません。しかし、私はLogcatでメッセージが表示されるのを見ることができますが、それはonFailure
からの印刷ではありません。
java.io.IOException: Address already in use
at android.net.LocalSocketImpl.bindLocal(Native Method)
at android.net.LocalSocketImpl.bind(LocalSocketImpl.java:306)
at android.net.LocalServerSocket.<init>(LocalServerSocket.java:48)
at com.facebook.stetho.server.LocalSocketServer.bindToSocket(LocalSocketServer.java:142)
at com.facebook.stetho.server.LocalSocketServer.listenOnAddress(LocalSocketServer.java:78)
at com.facebook.stetho.server.LocalSocketServer.run(LocalSocketServer.java:74)
at com.facebook.stetho.server.ServerManager$1.run(ServerManager.java:40)
私のアプリケーションは正常に動作しており、ユーザーはこれに気付かれません。しかし、私は何が間違っているのかを知る必要があります。