Как сохранить данные JSON из вызова API - PullRequest
2 голосов
/ 09 мая 2011

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

Я работаю над Android-приложением для поиска кафе, которое делает звонки на SimpleGeo API для получения каждой достопримечательности.У меня возникают проблемы с продумыванием способа хранения возвращаемых данных JSON таким образом, чтобы я мог использовать их для своих целей.Мне нужно сделать две вещи с данными: во-первых, мне нужен класс наложения карты для доступа к нему, чтобы я мог рисовать маркеры для каждой кофейни (с чем у меня все в порядке);во-вторых, мне нужно отобразить данные в виде списка.

Вызов API:

    /** Queries SimpleGeo with current location **/
    private void getJSONData() {
    SimpleGeoPlacesClient client = SimpleGeoPlacesClient.getInstance();
    client.getHttpClient().setToken(oauth_key, oauth_secret);
    double radius = 25;
    try {
        client.search(lat, lng, "coffee", null, radius,
                new FeatureCollectionCallback() {
                    public void onSuccess(FeatureCollection collection) {
                        try {
                            features = collection.toJSON();
                        } catch (JSONException e) {
                            System.out.println(e.getMessage());
                        }
                    }

                    public void onError(String errorMessage) {
                        System.out.println(errorMessage);
                    }
                });
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

Анализ данных:

    private void parseJSONData() throws JSONException {
    for (int i = 0; i < features.length(); i++) {
        JSONObject feature = features.getJSONObject(i).getJSONObject(
                "feature");
    }
}

Я сейчас пытаюсьсоздать объекты Java из данных, используя GSON, описанный в этом руководстве.Подойдет ли SQLite для этого?Буду признателен за любые советы.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 10 мая 2011

Я понимаю, что ответ уже был принят, но я все равно добавляю свои 2 бита ...

Возможно, что ответ JSON должен быть сохранен (в SQLite или текстовом файле).), чтобы «избежать ненужных вызовов API».Чтобы определить это, понадобится дополнительная информация о приложении.

Копирование из записи блога, которую мой друг попросил меня вычитать:

В некоторых ситуациях GSON делает фантастически простым создание объектов Java изJSON, хотя многие из примеров (особенно те, что содержатся в сообщениях в блогах) являются неубедительными тривиальными или излишне сложными, зачастую являясь не более чем примерами копирования-вставки (с измененными именами) из документации GSON, которая является сердцем проблемы - документыне очень подробны в своих примерах, и они быстро создают впечатление, что сложные объекты сложно отобразить.

Но я отвлекся ...

Если проблема в том, чтознать, как использовать JSON и / или GSON, это не означает, что решение включает в себя сохранение SQLite или текстового файла или любое другое сохранение.

Что касается кода в исходном вопросе, похоже, что он предполагает, что объектыв ответе JSON появится в каком-то определенном порядке.По моему опыту, это часто небезопасное предположение.Иногда itemX идет первым, иногда третьим.(Это, конечно, зависит от системы, генерирующей ответ.) Итак, анализируем результат, позволяя изменить порядок объектов JSON.

Что касается сохранения данных JSON, опять же, необходимо знать большео приложении, чем то, что было объяснено, до сих пор.

0 голосов
/ 09 мая 2011

Если вы работаете с Android, вы можете использовать вид карты Google

view, com.google.android.maps.MapView http://developer.android.com/resources/tutorials/views/hello-mapview.html

и ListView http://developer.android.com/reference/android/widget/ListView.html

Я не вижу, как SQLite вписывается сюда, если вы не планируете хранить места при перезапуске приложения.Все, что вам нужно сделать, это извлечь информацию о месте из JSON и делать с этими данными все, что вы хотите.

...