Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
bladzher
2 / 2 / 6
Регистрация: 15.10.2012
Сообщений: 76
#1

Get запрос с выводом полученной информации на экран - Программирование Android

01.02.2016, 19:27. Просмотров 527. Ответов 7

Добрый вечер! В Android разработке всего несколько дней.Подскажите/Помогите как это реализовать, что поюзать, а то уже мозг кипит ...
Необходимо сделать GET-запрос, получить информацию
Кликните здесь для просмотра всего текста
"{"status":"success","discounts":[{"id":"1","customer_id":"1","start_date":"2016-01-31","end_date":"2017-01-31","discount_text":"PGgxPtCe0YLQtNCw0Lwg0LLRgdC1INC00LDRgNC+0Lw8L2gxPg0KDQo8cD7QodC60LjQtNC60LAg\nPGI+MTAwJTwvYj4g0L3Qs CDQstGB0LUhISE8L3A+"}]}"

Расшифровать Base64
Кликните здесь для просмотра всего текста
"PGgxPtCe0YLQtNCw0Lwg0LLRgdC1INC00LDRgNC+0Lw8L2gxPg0KDQo8cD7QodC60LjQtNC60LAg\nPGI+MTAwJTwvYj4g0L3QsCDQstGB0LUhISE8L3A+" }]}"

Вывести расшифрованную информацию на экран устройства.

Код, который есть на данный момент:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.IOException;
 
public class MainActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        if (android.os.Build.VERSION.SDK_INT > 9) {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
        }
 
        makeGetRequest();
    }
    
    private void makeGetRequest() {
 
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet("http://www.akulov.xyz/discounts/b9407f30f5f8466eaff925556b57fe6d");
 
        HttpResponse response;
        try {
            response = client.execute(request);
 
            Log.d("Response of GET request", response.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }
    
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2016, 19:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Get запрос с выводом полученной информации на экран (Программирование Android):

Помогите с выводом пути полученной информации
Такая проблема! Имеется динамический сайт на php c базой sql! На сайт...

Работа с выводом информации на экран
Здравствуйте! Как сделать так, чтобы при изменении или переносе окна содержимое...

Не выполнят запрос с выводом результатов на экран.
У меня следущая проблема. Из одного файла по ссылке, передается значение str в...

Разбивка полученной информации на листы
Privet vcem. kno nibut znaet kak mogno razdelit polushenuu informazuu c...

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

Составить программу, которая обеспечивает ввод полученной информации и ее распечатку...
Распечатать анкетные данные студентов, получивших одну оценку 3 за все время...

7
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.02.2016, 19:34 #2
Цитата Сообщение от bladzher Посмотреть сообщение
if (android.os.Build.VERSION.SDK_INT > 9) {
* * * * * * StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
* * * * * * StrictMode.setThreadPolicy(policy);
* * * * }
Так нельзя делать. Работу с сетью надо выносить в отдельный поток. А по сути, что именно не получается сделать?
0
bladzher
2 / 2 / 6
Регистрация: 15.10.2012
Сообщений: 76
01.02.2016, 19:51  [ТС] #3
YuraAAA, Спасибо, позже займусь этим...

Запарился с расшифровкой base64 и выводом на экран.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
01.02.2016, 20:02 #4
bladzher, а как Вы json пришедший парсите?
0
Pablito
2653 / 2135 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
01.02.2016, 20:18 #5
Лучший ответ Сообщение было отмечено YuraAAA как решение

Решение

Я могу показать как делать с помощью okhttp client-а. Мне так привычнее.
Внимательно по шагам.

1. Подключаем библиотеки okhttp и gson (для парсинга json строки в объект)
в файле build.gradle дописываем
XML
1
2
compile 'com.google.code.gson:gson:1.7.2'
compile 'com.squareup.okhttp3:okhttp:3.0.0-RC1'
2. Создаем класс-модель для ответа от сервера. В код этого класса можно сильно не вчитываться, там по сути несколько полей, а остальное это геттеры-сеттеры.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class AkulovResponse {
 
    private String status;
    private Discounts[] discounts;
 
    public String getStatus() {
        return status;
    }
 
    public void setStatus(String status) {
        this.status = status;
    }
 
    public Discounts[] getDiscounts() {
        return discounts;
    }
 
    public void setDiscounts(Discounts[] discounts) {
        this.discounts = discounts;
    }
 
    static class Discounts {
        private String id;
 
        private String end_date;
 
        private String discount_text;
 
        private String start_date;
 
        private String customer_id;
 
        public String getId() {
            return id;
        }
 
        public void setId(String id) {
            this.id = id;
        }
 
        public String getEnd_date() {
            return end_date;
        }
 
        public void setEnd_date(String end_date) {
            this.end_date = end_date;
        }
 
        public String getDiscount_text() {
            return discount_text;
        }
 
        public void setDiscount_text(String discount_text) {
            this.discount_text = discount_text;
        }
 
        public String getStart_date() {
            return start_date;
        }
 
        public void setStart_date(String start_date) {
            this.start_date = start_date;
        }
 
        public String getCustomer_id() {
            return customer_id;
        }
 
        public void setCustomer_id(String customer_id) {
            this.customer_id = customer_id;
        }
    }
}


3. Как уже правильно сказали выше, операции с сетью надо делать в отдельном потоке, поэтому создаем в активити метод makeRequest()
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    private void makeRequest(final String url) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                OkHttpClient client = new OkHttpClient();
                Request request = new Request.Builder().url(url).build();
                try {
                    Response response = client.newCall(request).execute();
                    Gson gson = new Gson();
                    AkulovResponse akulovResponse = gson.fromJson(response.body().string(), AkulovResponse.class);
                    printResult(akulovResponse);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
Можно было сделать и на асинк таске, но пока что и так пойдет, кода меньше и проще.

4. создаем в активти метод, который вызовется когда наша задача отработает и вернет нам готовый объект
Java
1
2
3
4
5
6
7
8
9
    private void printResult(AkulovResponse response) {
        Log.i("***", response.getStatus());
        AkulovResponse.Discounts[] discounts = response.getDiscounts();
        Log.i("***", "" + discounts.length);
        if (discounts.length > 0) {
            String text = discounts[0].getDiscount_text();
            Log.i("***", text);
        }
    }
5. вызываем метод, где-то в onCreate()
Java
1
makeRequest("http://www.akulov.xyz/discounts/b9407f30f5f8466eaff925556b57fe6d");
6. PROFIT

Добавлено через 8 минут
поправочка, там текст description в BASE64, поэтому метод printResult немного изменить
Java
1
2
3
4
5
6
7
8
9
10
11
    private void printResult(AkulovResponse response) throws UnsupportedEncodingException {
        Log.i("***", response.getStatus());
        AkulovResponse.Discounts[] discounts = response.getDiscounts();
        Log.i("***", "" + discounts.length);
        if (discounts.length > 0) {
            String text = discounts[0].getDiscount_text();
            byte[] data = Base64.decode(text, Base64.DEFAULT);
            text = new String(data, "UTF-8");
            Log.i("***", text);
        }
    }
1
bladzher
2 / 2 / 6
Регистрация: 15.10.2012
Сообщений: 76
01.02.2016, 23:07  [ТС] #6
Паблито, Cпасибо, в эмуляторе сразу запустилось, а на устройствах пришлось немного повозиться, но тоже запустилось.
Единственное, что не могу сейчас понять, как вывести итоговый текст на экран устройства?
0
HanDi
892 / 339 / 65
Регистрация: 11.02.2012
Сообщений: 1,502
01.02.2016, 23:43 #7
Цитата Сообщение от bladzher Посмотреть сообщение
Единственное, что не могу сейчас понять, как вывести итоговый текст на экран устройства?
Java
1
private TextView textView;
В onCreate:
Java
1
textView = (TextView) findViewById(R.id.text_view); // text_view - это id компонента TextView на main layout
И там где-то в методе

Java
1
textView.setText(text);
1
bladzher
2 / 2 / 6
Регистрация: 15.10.2012
Сообщений: 76
02.02.2016, 15:13  [ТС] #8
HanDi, Спасибо, теперь все работает отлично!
0
02.02.2016, 15:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2016, 15:13
Привет! Вот еще темы с решениями:

Вывод данных в DataGridView2 из информации полученной по щелчку элемента в DataGridView1
Есть 2 заполненных DataGridView`a В первом заказчики Во втором заказы...

Как сэмулирoвать на php отсылку загoловков сервeру и затем забор полученной информации?
Как сэмулирoвать на php отсылку загoловков сервeру и затем забор полученной...

Создать таблицу. Составить программу, которая обеспечит ввод полученной информации и печать результатов
Составить список учебной группы, включающей 7 человек. Для каждого студента...

Незадача с выводом информации
Вот задание: Используйте две переменные типа float, предложите пользователю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru