Сохранить объект json в файл на мобильном телефоне

#java #android #json

#java #Android #json

Вопрос:

Я загружаю данные json с сервера и хочу сохранить их в файл на мобильном устройстве Android.

Как я могу это сделать с помощью внешнего хранилища? Когда я сохраняю их, я также хочу выполнить поиск в файле определенных данных. Есть ли лучший способ сделать это, чем внешнее хранилище?

 //parse json data
try{
    JSONArray jArray = new JSONArray(result);
    JSONObject json_data = null;
    category = new String[jArray.length()];
    name = new String[jArray.length()];
    date = new String[jArray.length()];
    content = new String[jArray.length()];

    for(int i=0;i<jArray.length() 2;i  ){
        HashMap<String, String> map = new HashMap<String, String>();

        if(i==0){ 
            if(category8 == "All"){
                map.put("id",  "5");
                map.put("name", "              All Posts");
                map.put("latitude", "");
                map.put("longitude", "");
                map.put("date", "");
                map.put("content", "");
                mylist.add(map);
            } else {
                json_data = jArray.getJSONObject(i);

                category[i] = json_data.getString("category");
                map.put("id",  "5");
                map.put("name", "              " category[i]);
                map.put("latitude", "");
                map.put("longitude", "");
                map.put("date", "");
                map.put("content", "");
                mylist.add(map);
            }
        } else if(i<jArray.length() 1) {
            json_data = jArray.getJSONObject(i-1);

            id = json_data.getInt("post_id");
            name[i-1] = json_data.getString("username");
            latitude = json_data.getDouble("latitude");
            longitude = json_data.getDouble("longitude");
            date[i-1] = json_data.getString("post_date");
            content[i-1] = json_data.getString("post_content");

            map.put("id",  String.valueOf(id));
            map.put("name", name[i-1]   " wrote:");
            map.put("latitude", "Latitude: "   latitude);
            map.put("longitude", "Longitude: "   longitude);
            map.put("date", "Date: "   date[i-1]);
            map.put("content", content[i-1]);
            mylist.add(map);
        }

        if(i==jArray.length() 1) {
            map.put("id",  "5");
            map.put("name", "");
            map.put("latitude", "");
            map.put("longitude", "");
            map.put("date", "");
            map.put("content", "");
            mylist.add(map);
        }
     }
} catch(JSONException e1) {
    Toast.makeText(getBaseContext(), "No posts found" ,Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
    e1.printStackTrace();
}
  

Ответ №1:

JSON необходимо проанализировать, чтобы получить из него информацию. Поэтому сохранять JSON-запрос и анализировать его каждый раз, когда вам нужна информация из него, как правило, плохая идея.

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

  • Если вы планируете выполнять обширный поиск по нему или вам требуются только некоторые части его информации, база данных должна быть вашим лучшим вариантом.
  • В противном случае, если вы просто хотите сохранить пару значений, вы можете выбрать более простой формат для более быстрого анализа (например, CSV).

Кроме того, вы сказали, что хотите сохранить эти вещи во внешнем хранилище. Вообще говоря: хранение вещей, которые принадлежат вашему приложению, во внешнем хранилище — плохая идея. Однако в некоторых случаях это имеет смысл:

  • Ваше приложение хочет поделиться определенными вещами (а вы не хотите использовать ContentProvider )
  • Вашему приложению требуется большое количество файлов, которые нельзя сохранить во внутреннем хранилище.

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

В случаях, отличных от перечисленных выше, лучше использовать внутреннее хранилище.

Ответ №2:

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