Как получить JSON данные с сервера в Android?
Надо получить одну переменную int с сервера. Не получается, эмулятор вылетает, никакую ошибку не выдаёт. Код вот такой:
private class DownloadDataTask extends AsyncTask<String,Void,String> {
@Override
protected String doInBackground(String... strings) {
java.net.URL url =` null;
HttpURLConnection urlConnection = null;
StringBuilder result = new StringBuilder();
try {
url = new URL(strings[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
String line = reader.readLine();
while (line != null) {
result.append(line);
line = reader.readLine();
}
return result.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
try {
JSONObject jsonObject = new JSONObject(s);
poluchennyedannye = jsonObject.getInt("data");
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "ВСЕ ПЛОХО!!!!! ВЫРУБАЙ ЭТОТ КОД, НИЧЕ НЕ РАБОТАЕТ!!!", Toast.LENGTH_SHORT).show();
}
}
}
Ответы (1 шт):
Автор решения: Антон
→ Ссылка
Для начала в папке res/xml нужно создать файл: network_security_config.xml со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"/> </network-security-config>В файле AndroidManifest.xml добавить следующие строки:
<uses-permission android:name="android.permission.INTERNET" /> <application android:usesCleartextTraffic="true" android:networkSecurityConfig="@xml/network_security_config"Теперь всё будет работать:
package com.example.android; import androidx.appcompat.app.AppCompatActivity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); MyTask myTask = new MyTask(); myTask.execute(); } private class MyTask extends AsyncTask<Void, Void, Void> { StringBuilder builder = new StringBuilder(); String line; @Override protected void onPreExecute() { super.onPreExecute(); Toast.makeText(MainActivity.this, "Подключение к API", Toast.LENGTH_SHORT).show(); } @Override protected Void doInBackground(Void... voids) { try { URL url = new URL("https://jsonplaceholder.typicode.com/posts/1"); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("GET"); httpURLConnection.setDoInput(true); httpURLConnection.connect(); if(httpURLConnection.getResponseCode() != HttpURLConnection.HTTP_OK) { throw new Exception(httpURLConnection.getResponseMessage()) } BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream())); while((line = bufferedReader.readLine()) != null) { builder.append(line); } bufferedReader.close(); httpURLConnection.disconnect(); } catch (Exception e) { Log.e("ERROR", e.getMessage()); } return null; } @Override protected void onPostExecute(Void unused) { super.onPostExecute(unused); try { JSONObject buffer = new JSONObject(builder.toString()); Log.d("Тайтл", buffer.getString("title")); } catch (JSONException e) { e.printStackTrace(); } } } }