знаю, что тут уйма ответов на мой вопрос, но я либо неправильно пробую, либо опять же неправильно пробую. Разрабатываю приложение на android. Требуется связаться с базой данной, так как напрямую небезопасно, реализовываю через post-запрос и последующую обработку в PHP на сайте. Вроде все сделал, но запрос не посылается уходит в catch, а в логах такая строка:
2019-04-05 12:11:39.920 7823-7823/com.potapov.club17 D/NetworkSecurityConfig: No Network Security Config specified, using platform default
В манифест вписал доступ к интернету, также как сказано в Google Документации добавил ссылку на протокол безопасности в папке xml, так же и описал этот протокол. Сейчас приложу все по порядку.
network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config usesCleartextTraffic="false">
<domain includeSubdomains="true">ссылка, которую я убрал, чтобы не спамили</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.potapov.club17">
<meta-data android:name="android.security.net.config"
android:resource="@xml/network_security_config" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
А вот так я пытаюсь послать post-запрос:
protected Void doInBackground() {
try {
String myURL = "ссылка"; //убрал, чтобы не спамили запросами
String parammetrs = "name=Android&tel=8890989&date=10.10.2019&time=10:10&message=dsdsdsd";
byte[] data = null;
InputStream is = null;
try {
URL url = new URL(myURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("Content-Length", "" + Integer.toString(parammetrs.getBytes().length));
OutputStream os = conn.getOutputStream();
data = parammetrs.getBytes("UTF-8");
os.write(data);
data = null;
conn.connect();
int responseCode= conn.getResponseCode();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (responseCode == 200) {
is = conn.getInputStream();
byte[] buffer = new byte[8192]; // Такого вот размера буфер
// Далее, например, вот так читаем ответ
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
data = baos.toByteArray();
String resultString = new String(data, "UTF-8");
} else {
}
} catch (MalformedURLException e) {
//resultString = "MalformedURLException:" + e.getMessage();
} catch (IOException e) {
//resultString = "IOException:" + e.getMessage();
} catch (Exception e) {
date.setText("Exception:" + e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Как настроить протокол безопасности нормально? Или в данном случае не в нем дело? Требуется просто посылать запрос с данными, которые я потом соберу с полей приложения.
Вы неверно задали конфигурацию для приложения в манифесте.
Документация говорит что это атрибут тэга application
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
У вас же это мета-данные.
https://developer.android.com/training/articles/security-config.html
Продвижение своими сайтами как стратегия роста и независимости