Я очень новичок в 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;
}
Что заставляет вас думать, что Java не имеет глобальных переменных? Просто создайте статический объект в одном из ваших классов и получите доступ к нему с помощью MyClass.myObject. – BLuFeNiX
Указатели ---> http://developer.android.com/guide/topics/data/data-storage.html – petey
Я подбираю это на лету, так что полупонимание того, что я читаю, я думаю когда люди сказали в [этой теме] (http://stackoverflow.com/questions/4646577/global-variables-in-java), что в java нет globals, я как бы взял это буквально. Спасибо за ответы. – lucas