2013-05-16 3 views
0

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

Я делаю приложение для Android, которое загружает данные JSON с SD-карты, которую вы можете выполнить путем фильтрации.

Если бы я делал это в javascript, я бы просто сохранил данные в глобальной переменной и получал доступ к ней всякий раз. Но (из того, что я прочитал), у java нет глобальных переменных, и то, что у него есть, похожее, не очень разумно использовать.

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

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

Может ли кто-нибудь дать мне несколько указателей на лучший способ сделать это? Я просто хочу получить данные один раз, когда приложение загружается, а затем получить доступ к нему, когда будет позже. Если это помогает, это код, который я использую, чтобы получить данные с SD-карты ...

public static JSONArray getArray(){ 

    FileInputStream stream = null; 

    String jString = null; 
    File yourFile = new File("/mnt/extSdCard/app/thejson.json"); 

    try { 
     stream = new FileInputStream(yourFile); 
     FileChannel fc = stream.getChannel(); 
     MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); 
     /* Instead of using default, pass in a decoder. */ 
     jString = Charset.defaultCharset().decode(bb).toString(); 

     } catch (FileNotFoundException e) { 
     Log.i("err", "file not found"); 
    } 
    catch (IOException e) { 
     Log.i("err", "IO exception"); 
    } 
    try { 
     stream.close(); 
     } catch (IOException e) { 
     Log.i("1", "IO exception");  
    } 
    try { 
     names = new JSONArray(jString); 
     } catch (JSONException e1) { 
      Log.i("err", "IO exception"); 
    } 
    return names; 
}  
+1

Что заставляет вас думать, что Java не имеет глобальных переменных? Просто создайте статический объект в одном из ваших классов и получите доступ к нему с помощью MyClass.myObject. – BLuFeNiX

+0

Указатели ---> http://developer.android.com/guide/topics/data/data-storage.html – petey

+0

Я подбираю это на лету, так что полупонимание того, что я читаю, я думаю когда люди сказали в [этой теме] (http://stackoverflow.com/questions/4646577/global-variables-in-java), что в java нет globals, я как бы взял это буквально. Спасибо за ответы. – lucas

ответ

1

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

+0

Обратите внимание, что это не постоянное хранилище данных, но вам нужно только постоянное хранилище, если вы хотите сохранить данные даже после того, как приложение полностью закрыто, что необязательно. – jaredad7

+0

Спасибо. Я в конечном итоге объявлял «публичные статические имена JSONArray», в начале моего действия в splashscreen, тогда «окончательные имена JSONArray;» в конце - кажется, работает нормально - если есть какие-то недостатки, я все уши. – lucas

+0

Просто из любопытства, для чего вы используете финальный массив? Кроме того, вы могли бы задать свой ответ как принятый ответ, если это решение, которое вы использовали? – jaredad7

0

Просто сделайте ваш «имена» JSON массив переменной-члена в вашей основной деятельности, и вы можете получить доступ к нему, как пока ваша деятельность живет.

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