我看到了类似的问题,但无法得到答案。
我在linux服务器上读取mysql到php的数据然后把它放在列表中。 在蜂窝网络中,可以有多个并发连接,但是在同一个Wi-Fi网络中不可能同时拥有多个连接。
当然,网络浏览器没有问题,但只有连接到智能手机终端时才会出现问题。 我使用了SAMSUNG Galaxy 6和4等几个终端。
我不认为这是一个编码错误。
如果第一个连接的终端从WIFI网络调用call.enqueue,则很可能在使用后不释放套接字。
如果某人已经完成并解决了它,请给我一个想法!
请注意,来源如下:
public class ApiService {
public static <S> S createService(Class<S> serviceClass) {
OkHttpClient httpClient=new OkHttpClient.Builder()
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(""http://www.~~~~~~~~~~~~~~~/")
.addConverterFactory(GsonConverterFactory.create())
.client(httpClient).build();
return retrofit.create(serviceClass);
}
}
@GET("center_list_select_by_center_gubun.php")
@Headers({"Content-Type: application/json; charset=utf-8"})
Call<CenterModel> getCenterListByCenterGubun(@Query("center_gubun") String center_gubun,
@Query("article_id") String article_id,
@Query("on_list") String on_list);
api = ApiService.createService(ApiInterface.class);
Call<CenterModel> call = api.getCenterListByCenterGubun(tab_gubun_s, String.valueOf(lastId), "1");
call.enqueue(new Callback<CenterModel>() {
@Override
public void onResponse(@NonNull Call<CenterModel> call, @NonNull Response<CenterModel> response) {
if(response.isSuccessful()){
if (response.body() == null || response.body().getResult() == null) {
return;
}
ArrayList<CenterModel.data> resultData = response.body().getResult();
CenterModel.data lastData = resultData.get(resultData.size()-1);
if (lastData.id != null) {
if (lastId > Integer.valueOf(lastData.id)) {
lastId = Integer.valueOf(lastData.id);
isLoaded = false;
setResponseData(resultData, isNew);
dataList.addAll(resultData);
}
} else {
isLoaded = true;
}
}else{
Toast.makeText(getContext(), "Error:"+String.valueOf(response.code()), Toast.LENGTH_LONG).show();
}
}
@Override
public void onFailure(@NonNull Call<CenterModel> call, @NonNull Throwable t) { Log.e(TAG, t.toString());
if (t.toString().split(":")[0].equals("java.net.SocketTimeoutException")) MyUtils.wifiAlert(getContext());
}
});