Поэтому я разрабатываю приложение для Android, которое должно взаимодействовать с API, который я кодировал. Пока я просто запускаю API локально. Я уже протестировал все маршруты, и все они работают.
Теперь я хотел бы отправлять запросы к этому API в моем приложении Android. Для этого я использую класс RequestManager
, который расширяет AsyncTask
для управления каждым запросом (я могу показать вам код, если вы спросите). Я добавил <uses-permission android:name="android.permission.INTERNET" />
и <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
в манифест.
Когда я выполняю запрос через RequestManager
, используя IP-адрес моего ПК, он на некоторое время приостанавливается, затем выдает SocketTimeoutException
сследующая ошибка: failed to connect to /XX.XX.XX.XX (port XXXX) from /XX.XX.XX.XX (port XXXX)
. Обратите внимание, что выполнение одного и того же запроса от Postman работает без проблем.
Итак, я попробовал несколько вещей, таких как добавление файла network_security_config.xml
, чтобы разрешить трафик с IP-адресом моего ПК, я деактивировал свой брандмауэр, я добавил несколькоправила входящего и исходящего трафика на моем брандмауэре для предоставления разрешений Android Studio, IP-адресу, используемому порту и т. д., но, похоже, ничего не решает проблему.
Кто-нибудь испытывал то же самое или кто-нибудь может мне помочь исправитьэто ? Мне действительно нужно, чтобы он работал ..
РЕДАКТИРОВАТЬ: Вот класс RequestManager:
class RequestManager extends AsyncTask<HashMap<String, Object>, Void, Response> {
protected Response doInBackground(HashMap<String, Object>... parameterMaps) {
Response response = null;
HashMap<String, Object> params = parameterMaps[0];
String method = (String) params.get("method");
if ("GET".equals(method)) {
response = doGet(params);
} else if ("POST".equals(method)) {
response = doPost(params);
} else if ("UPDATE".equals(method)) {
response = doUpdate(params);
} else if ("DELETE".equals(method)) {
response = doDelete(params);
}
return response;
}
private Response doGet(HashMap<String, Object> params) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
Context context = (Context) params.get("context");
String protocol = Config.getConfigValue(context, "protocol");
String ipAddress = Config.getConfigValue(context, "ipAddress");
String port = Config.getConfigValue(context, "port");
String route = (String) params.get("route");
String url = protocol + ipAddress + ":" + port + "/" + route;
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/json")
.addHeader("Cache-Control", "no-cache")
.build();
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
private Response doPost(HashMap<String, Object> params) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
Context context = (Context) params.get("context");
String protocol = Config.getConfigValue(context, "protocol");
String ipAddress = Config.getConfigValue(context, "ipAddress");
String port = Config.getConfigValue(context, "port");
String route = (String) params.get("route");
String url = protocol + ipAddress + ":" + port + "/" + route;
MediaType mediaType = MediaType.parse("application/json");
String bodyContent = params.get("body").toString();
RequestBody body = RequestBody.create(mediaType, bodyContent);
Request request = new Request.Builder()
.url(url)
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("Cache-Control", "no-cache")
.build();
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
private Response doUpdate(HashMap<String, Object> params) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
Context context = (Context) params.get("context");
String protocol = Config.getConfigValue(context, "protocol");
String ipAddress = Config.getConfigValue(context, "ipAddress");
String port = Config.getConfigValue(context, "port");
String route = (String) params.get("route");
String url = protocol + ipAddress + ":" + port + "/" + route;
MediaType mediaType = MediaType.parse("application/json");
String bodyContent = params.get("body").toString();
RequestBody body = RequestBody.create(mediaType, bodyContent);
Request request = new Request.Builder()
.url(url)
.put(body)
.addHeader("Content-Type", "application/json")
.addHeader("Cache-Control", "no-cache")
.build();
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
private Response doDelete(HashMap<String, Object> params) {
Response response = null;
try {
OkHttpClient client = new OkHttpClient();
Context context = (Context) params.get("context");
String protocol = Config.getConfigValue(context, "protocol");
String ipAddress = Config.getConfigValue(context, "ipAddress");
String port = Config.getConfigValue(context, "port");
String route = (String) params.get("route");
String url = protocol + ipAddress + ":" + port + "/" + route;
Request request = new Request.Builder()
.url(url)
.delete()
.addHeader("Content-Type", "application/json")
.addHeader("Cache-Control", "no-cache")
.build();
response = client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
return response;
}
protected void onPostExecute(Response response) {
}
}
И вот как я это называю:
HashMap<String, Object> params = new HashMap<>();
JSONObject body = Utils.jsonify(content);
params.put("body", body);
params.put("route", Constants.User.BASE_USER);
params.put("context", SignUp.this);
params.put("method", "POST");
AsyncTask<HashMap<String, Object>, Void, Response> requestManager = new RequestManager().execute(params);