2015-03-27 2 views
0

Ранее я задал несколько вопросов относительно того, какой метод я должен использовать для сохранения некоторых данных из моего приложения, чтобы получить их на позднее, после того, как он был закрыт/остановлен. Думаю, я получил ответы, которые я искал. Но с тех пор мои усилия по реализации такой функции сократились. Я исследовал различные вопросы, которые у меня были, для которых я думал, что нашел ответы. Но кажется, что ответы, хотя и правильные, не обязательно совпадают друг с другом. Я имею в виду, они могут работать отдельно, но, исходя из разных источников, они не работают вместе в целом, и для меня они вообще не работают. Я убежден, что хочу использовать SharedPreferences. Это может быть или не быть, но это направление моих усилий в последнее время.Android - Как сохранить массив int/bool, проверить, существует ли он, и загрузить его после перезапуска приложения.

Так что я задам этот вопрос с несколькими частями.

  1. Как бы вы могли сохранить массив целых чисел (или логических значений)?
  2. Перед загрузкой сохраненного массива, как бы проверить, существует ли он?
  3. Как я могу загрузить массив для использования его значений снова?

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

Если вы действительно хотите увидеть какой-либо код, я могу показать вам все мои сломанные предметы в данный момент (что я еще не удалял), но я не вижу, чтобы это делало вам что-то хорошее. Тем не менее, я отвечу на любые вопросы, которые могут вам понадобиться, чтобы помочь мне.

Заранее спасибо.

EDIT: Массив изменится очень мало от версии приложения до версии. Это должно быть около 500-2000 целых чисел или логических значений (либо/или будет работать одинаково для меня). Массив в основном представляет собой набор флагов, который сообщает приложению, что он делает то или другое в зависимости от значения. Размер будет изменяться только в том случае, если я добавляю или удаляю элементы между версиями. По этой причине, после проверки наличия файла/массива, я сравню сохраненный массив с одним в приложении и действую соответствующим образом.

+0

SAving, для каких целей? Когда вы хотите перезагрузить их? Когда, если вообще, вы хотите сбросить настройки по умолчанию? Мы говорим о массивах 10 или массивах в 10 миллионов? Является ли размер статическим или может ли он измениться? Ваш вопрос слишком важен для ответа. В зависимости от того, что вы хотите, SharedPreferences может быть хорошим способом пойти или нет. Он не делает массивы хорошо. –

+0

Эй, спасибо за ответ и вопросы, я буду, надеюсь, все ваши ответы. – lilgodwin

ответ

0

У меня были похожие проблемы с данными, которые необходимо сохранить при перезагрузке. Я нашел два способа сделать это.

1) Данные редко доступны. Храните данные в .../файлах в некотором формате, которые можно легко сохранить/получить. Я использовал JSONArrays для хранения данных. mContext.getFilesDir() предоставит вам путь, и вы можете просто проверить, существует ли файл file.exists() для определения наличия данных. Вам нужно будет создать что-то возразит: 1) преобразовать данные в хранимом формат

for(int i = 0; i < mArray.size(); i++) 
{ 
    JSONObject jo = new JSONObject(); 
    jo.put("THINGY", mArray[i]); 

    ja.put(jo); 
} 

2) извлекать данные из хранилища

String js = readFromFile(fileName); 
if(!js.isEmpty()) 
     ja = new JSONArray(js); 
for(int i = 0; i < ja.length(); i++ 
{ 
// CONVERT THIS ARRAY TO YOUR INT... 
} 

3) чтение/запись файлов, такие как это:

private void writeToFile(String fileName, String data) 
{ 
    try 
    { 

     FileOutputStream fOut = openFileOutput(fileName, MODE_PRIVATE); 
     OutputStreamWriter osw = new OutputStreamWriter(fOut); 

     // Log.d(TAG, "Writing output log..."); 
     osw.write(data); 
     osw.flush(); 

     osw.close(); 
    } 
    catch(Exception e) 
    { 
     Log.e(TAG, "Cannot create " + fileName); 
    } 
} 


private String readFromFile(String fileName) 
{ 

    String ret = ""; 

    try 
    { 
     InputStream inputStream = openFileInput(fileName); 

     if (inputStream != null) 
     { 
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
      String receiveString = ""; 
      StringBuilder stringBuilder = new StringBuilder(); 

      while ((receiveString = bufferedReader.readLine()) != null) 
      { 
       stringBuilder.append(receiveString); 
      } 

      inputStream.close(); 
      ret = stringBuilder.toString(); 
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     Log.e(TAG, "File not found: " + e.toString()); 
    } 
    catch (IOException e) 
    { 
     Log.e(TAG, "Can not read file: " + e.toString()); 
    } 

    return ret; 
} 

JSON хорошо работает в этом случае, потому что есть простые способы преобразования в/из строк.

2) Частый доступ Я использовал SQLiteDatabase.Я использую Singlton и DBHelper.getInstance(), чтобы получить к нему доступ. Это кажется излишним, но это хорошее решение, если объем данных, которые вы сохраняете, выходит за рамки простого массива целых чисел.

Действительно основное (но звуковое) место для начала: http://www.vogella.com/tutorials/AndroidSQLite/article.html. Обратите внимание, что его страница была написана для 4.3.

HTH.

+0

Я просмотрел это, и я обязательно посмотрю на него. Я только видел термин JSON, и я всегда считал, что это просто еще один язык программирования. Я действительно хочу, чтобы это было максимально простым (с использованием методов, которые я могу по-настоящему понять и оценить). Тем не менее, большое спасибо за ваш ответ. Как я уже сказал, я обязательно посмотрю на это. – lilgodwin

 Смежные вопросы

  • Нет связанных вопросов^_^