Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
1

Отправка запроса на сервер - получение ответа в xml и обработка

17.01.2014, 14:53. Показов 5369. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день.
Искал по всем форумам и всем блогам, но нужного ответа не нашел и не добился результата.

Отправляется Get запрос на сервер http://myserver.ru/obrabotchik.php?number=123456

Есть таблица номеров, от куда обработчик берет номера где number=123456 и отправляет ответ ввиде xml обратно. У каждого номера есть 2 подпункта или свойства незнаю как правильно объяснить.

И из этого xml Ответа нужно сгенерировать таблицу

Номер Параметр1 Параметр2
Номер Параметр1 Параметр2
Номер Параметр1 Параметр2
Номер Параметр1 Параметр2

Запрос отправлять научился - но как получить ответ в виде xml и обработать его не знаю и ненашел нигде.
Пожалуйста помогите решить этот вопрос, так как уже 3 дня застрял на одном и том же месте.

Заранее всех благодарю за содействие помощь и поддержку.

Добавлено через 1 час 6 минут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.01.2014, 14:53
Ответы с готовыми решениями:

Отправка и получение данных (запроса) из сервера
Помогите пожалуйста! Мне нужно отправить данные на сервер, желательно чтобы и в ответ сервер что-то...

Отправка POST-запроса на сервер
Задача - отправить на сервер запрос (либо параметры для запроса на сервере) и получить выборку....

Отправка запроса на сервер и принять результат
Здравствуйте! Такая проблема возникала. Пользователь вводит имя пользователя и пароль и отправляет...

Отправка запроса на сервер - получение ответа в xml и обработка
Пожалуйста помогите в решении проболемы. Извините если создаю дубль тем, ну очень нужно найти...

6
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
18.01.2014, 15:43  [ТС] 2
Прошу у всех помощи. Отзовитесь пожалуйста, кто чем может помочь
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
18.01.2014, 15:47 3
Kazachek, так, давайте разбираться. Сервер присылает xml.
1. Надо сохранить этот xml в файловую систему
2. Его надо распарсить
3. Вывести на экран таблицу
Так?
1
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
18.01.2014, 16:06  [ТС] 4
YuraAAA, да именно так
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
18.01.2014, 16:39 5
Kazachek, нет ничего проще! часть 1)
Создаём файл приложение. Это будет наш файл глобальных утилит.

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
public class TheApplication extends Application {
 
    private static TheApplication instance;
    public static final String TEMP_FOLDER = "temp";
 
    public static TheApplication getInstance() {
        return instance;
    }
 
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }
 
    public static String getStorageDir() {
        File dir = instance.getCacheDir();
        String storageDirPath = dir.getAbsolutePath() + "/";
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
 
        dir = new File(storageDirPath + TEMP_FOLDER);
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
 
        dir = new File(storageDirPath + TEMP_FOLDER);
        if (!dir.exists()) dir.mkdirs();
        requestFilePermission(dir.getAbsolutePath());
        return storageDirPath;
    }
 
    public static void requestFilePermission(String filePath) {
        if (filePath != null && !filePath.trim().isEmpty()) {
            try {
                Runtime.getRuntime().exec("chmod 755 " + filePath);
            } catch (IOException e) {
                Log.e("Utils.getStorageDir", e.getMessage(), e);
            }
        }
    }
}
И не забываем добавить в манифест чтобы этот файл стал действительно Application-файлом.
Java
1
2
    <application android:label="@string/app_name"
                 android:name="TheApplication">
Отлично, теперь у нас есть кэш-директория.

Опишем интерфейс обратного вызова:
Java
1
2
3
4
5
6
7
public interface IDownloadCallback {
 
    void onSuccess(String filePath);
 
    void onFailure(Throwable reason);
 
}
Далее нам нужно скачать файл. Будем отталкиваться от того, что сервер шлёт нам бинарный контент.
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
74
75
76
77
78
import android.os.AsyncTask;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
 
 
public class DownloadWorker extends AsyncTask<Void, Void, String> {
 
    private IDownloadCallback downloadCallback; //callback
    private String url;
    public static final String FILE_NAME = "your_file.xml"; //filename
    private Throwable error; //Error flag
    private boolean deleteIfExists;
 
    public DownloadWorker(String url, boolean deleteIfExists, IDownloadCallback downloadCallback) {
        this.downloadCallback = downloadCallback;
        this.url = url;
        this.deleteIfExists = deleteIfExists;
    }
 
    public DownloadWorker(String url, IDownloadCallback downloadCallback) {
        this(url, false, downloadCallback);
    }
 
    @Override
    protected String doInBackground(Void... voids) {
        String filePath = TheApplication.getStorageDir() + FILE_NAME;
        File file = new File(filePath);
        if (file.exists()) {             //Существует ли файл?
            if (deleteIfExists) { //Если существует и надо удалить - трём
                file.delete();
            } else {
                return filePath; //Иначе возвращаем файловый путь
            }
        }
        //Качаем файл
        try {
            URL u = new URL(url);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();
            FileOutputStream f = new FileOutputStream(file);
            InputStream in = c.getInputStream();
 
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ( (len1 = in.read(buffer)) > 0 ) {
                f.write(buffer,0, len1);
            }
            f.close();
        } catch (IOException e) {
            e.printStackTrace();
            error = e;
            return null;
        }
        return filePath;
    }
 
    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        if (downloadCallback == null) return;
        if (s != null) {
            downloadCallback.onSuccess(s);
            return;
        }
        if (error != null) {
            downloadCallback.onFailure(error);
            return;
        }
        throw new IllegalStateException("Some error was occurred. We don't have entity and error?");
    }
}
Собственно, всё. Вызываем воркер:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyActivity extends Activity {
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new DownloadWorker("your_url", true, new IDownloadCallback() {
            @Override
            public void onSuccess(String filePath) {
                Log.d(MyActivity.class.getSimpleName(), "Success: " + filePath);
            }
 
            @Override
            public void onFailure(Throwable reason) {
                Log.d(MyActivity.class.getSimpleName(), "Error: " + reason);
            }
        });
    }
 
}
Проверяйте. Если работает и скачивает файл (его можно посмотреть на эмуляторе через DDMS, так как на телефоне не всегда есть доступ к кэш-папке), приступим к следующему шагу: xml parser.

Добавлено через 2 минуты
Java
1
requestFilePermission
метод, меняющий доступ к файлу. Иногда на 2.3.x android пропадает доступ к кэшу.
1
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
19.01.2014, 09:52  [ТС] 6
YuraAAA, Огромное спасибо за подробное объяснение, сейчас же попрактикуюсь, еще один вопрос: А что если сервер будет отправлять xml в строчном формате а не одним файлом?
0
1605 / 1337 / 291
Регистрация: 25.10.2009
Сообщений: 3,487
Записей в блоге: 2
19.01.2014, 13:19 7
Kazachek, Я вижу только 2 варианта.
1 - если ваш endpoint выглядит как http(s)://.../file.xml
2 - либо бинарный формат.
В Вашем случае вроде как бинарный.
0
19.01.2014, 13:19
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.01.2014, 13:19
Помогаю со студенческими работами здесь

Отправка запроса на сервер, и получение ответа
Нужно сделать запрос на сайт, &quot;http://....... .php и что бы он в ответ выдал Фамилию и пароль....

Отправка и получение ответа XML
Здравствуйте. Я в VBA не очень (учусь) и с такими задачами еще не сталкивался, - руководство...

Отправка POST запроса и получение ответа
Есть проблема. Нужно отправить на сайт POST запрос и в зависимости от этого запроса сайт выдает...

Отправка POST запроса в ВК и получение ответа
Пытаюсь загрузить аватар в группу ВК. И при отправке post запроса с изображением, в ответ приходит...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru