Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.95
Kazachek
 Аватар для Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 334
17.01.2014, 14:53     Отправка запроса на сервер - получение ответа в xml и обработка #1
Всем добрый день.
Искал по всем форумам и всем блогам, но нужного ответа не нашел и не добился результата.

Отправляется 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 минут
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kazachek
 Аватар для Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 334
18.01.2014, 15:43  [ТС]     Отправка запроса на сервер - получение ответа в xml и обработка #2
Прошу у всех помощи. Отзовитесь пожалуйста, кто чем может помочь
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.01.2014, 15:47     Отправка запроса на сервер - получение ответа в xml и обработка #3
Kazachek, так, давайте разбираться. Сервер присылает xml.
1. Надо сохранить этот xml в файловую систему
2. Его надо распарсить
3. Вывести на экран таблицу
Так?
Kazachek
 Аватар для Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 334
18.01.2014, 16:06  [ТС]     Отправка запроса на сервер - получение ответа в xml и обработка #4
YuraAAA, да именно так
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
18.01.2014, 16:39     Отправка запроса на сервер - получение ответа в xml и обработка #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 пропадает доступ к кэшу.
Kazachek
 Аватар для Kazachek
15 / 15 / 2
Регистрация: 03.11.2013
Сообщений: 334
19.01.2014, 09:52  [ТС]     Отправка запроса на сервер - получение ответа в xml и обработка #6
YuraAAA, Огромное спасибо за подробное объяснение, сейчас же попрактикуюсь, еще один вопрос: А что если сервер будет отправлять xml в строчном формате а не одним файлом?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.01.2014, 13:19     Отправка запроса на сервер - получение ответа в xml и обработка
Еще ссылки по теме:

Отправка запроса на сервер и принять результат Android
Android Ожидание ответа от запроса к серверу по сети
Android HttpUrlConnetcion получение ответа от сервера
SocketServer, Client. Получение ответа от сервера Android
Отправка POST запроса Android

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

Или воспользуйтесь поиском по форуму:
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
19.01.2014, 13:19     Отправка запроса на сервер - получение ответа в xml и обработка #7
Kazachek, Я вижу только 2 варианта.
1 - если ваш endpoint выглядит как http(s)://.../file.xml
2 - либо бинарный формат.
В Вашем случае вроде как бинарный.
Yandex
Объявления
19.01.2014, 13:19     Отправка запроса на сервер - получение ответа в xml и обработка
Ответ Создать тему
Опции темы

Текущее время: 18:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru