Получая JSON из URL, выберите значение и сохраните его в textView - PullRequest
0 голосов
/ 05 июня 2019

Я начинаю изучать Android и столкнулся с проблемой, которую не могу решить: у меня есть URL с объектом JSON: http://jsonplaceholder.typicode.com/todos Я пытаюсь подключить URL в java-androidstudio, а затем выбратьточное значение, скажем, я хочу значение заголовка от id = 1 и поместите его в мой textView (идентификатор textview равен 'com1')

Я пришел к этому коду, который должен поставить хотя бы значение idк textview .... но на самом деле ничего не делает

            String sURL = "http://jsonplaceholder.typicode.com/todos";
            URL url = new URL(sURL);
            URLConnection request = url.openConnection();
            request.connect();
JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent()));
            JsonObject rootobj = root.getAsJsonObject();
            String idcko = rootobj.get("id").getAsString();

            TextView textElement = (TextView) findViewById(R.id.com1);
            textElement.setText(idcko);

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Есть несколько причин, по которым ваш код работает не так, как вы ожидаете.

Во-первых: Убедитесь, что вы правильно настроили манифест Android, включив разрешение ИНТЕРНЕТ и разрешив трафик открытым текстом.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.sandbox"
            android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        andoird:useCleartextTraffix="true"
        ... />

Секунда: Убедитесь, что вы выполняете свой запрос в AsyncTask. Android не разрешает выполнение HTTP-запросов в основном потоке. Чтобы преодолеть это, создайте новую задачу, расширяющую абстрактный класс AsyncTask.

class UrlRequestTask extends AsyncTask<Void, Void, Void> {
    protected void doInBackground() {
        String sURL = "http://jsonplaceholder.typicode.com/todos";
            URL url = new URL(sURL);
            URLConnection request = url.openConnection();
            request.connect();
            JsonParser jp = new JsonParser(); //from gson
            JsonElement root = jp.parse(new InputStreamReader((InputStream) 
            request.getContent()));
            JsonObject rootobj = root.getAsJsonObject();
            String idcko = rootobj.get("id").getAsString();

            TextView textElement = (TextView) findViewById(R.id.com1);
            textElement.setText(idcko);
    }
}

Затем вы можете вызвать свою задачу в любом действии onCreate следующим образом: new UrlRequestTask().execute();

Попробуйте это и посмотрите, что произойдет. Публиковать сообщения об ошибках, чтобы помочь себе и другим точно определить, что не так. Я столкнулся с проблемами, когда впервые сделал это, и именно эти решения помогли мне.

Ура!

Редактировать: форматирование

0 голосов
/ 05 июня 2019

Хорошее место для начала - прочитать о volley , это библиотека, которая поможет вам управлять запросами.

Вот учебник о том, как использовать залп Android Volley Tutorial

и хороший пример можно найти здесь

...