Насколько я знаю, строковые массивы в Android не являются динамическими. По крайней мере, согласно тому, что мне сказали на этом сайте. Я не могу просто создать массив строк, а затем добавить к нему столько элементов, сколько захочу. Чтобы обойти это, вы делаете ListArray, а затем преобразовываете его в массив String, когда вы закончили массив. Если бы я был неправильно информирован об этом, то вы можете ответить на этот вопрос, сказав мне, как создать динамический массив строк, например:Android String Array Inside If Statement
String[] menuList = new String[];
menuList.add("One");
menuList.add("A");
String firstItem = menuList[0];
menuList.add("Two");
Обратите внимание, я могу вытащить из нее, а затем добавить к нему без необходимости принимать какие-либо дополнительные шагов или преобразований.
Предполагая, что это невозможно, я пытаюсь установить массив на основе данных в текстовом файле в Интернете. Пока все хорошо, и каждый раз, когда они обращаются к этому текстовому файлу, приложение сохраняет текстовый файл локально в приложении. Все еще хорош. Однако, если нет доступа в Интернет, я хочу, чтобы массив String был основан на сохраненном локальном текстовом файле. Проблема в том, что я считаю, что мне нужно объявить длину массива строк по мере его создания, и если я создам его в выражении if, остальная часть приложения не узнает его. Как это:
ListArray<String> menuList = getFile(filename);
//The above line populates the ListArray with the online file, and returns an empty ListArray if there is no internet connection or if there is some problem with getting the file.
//Now I want to populate a String[] with the ListArray if it was successful (and overwrite the local copy), or if it was unsuccessful, I want to get the local copy and populate it with that.
if(menuList.size != 0){
writeToFile("Menu List", menuList);
String[] menuArray = menuList.toArray(new String[menuList.size()]);
} else {
String[] menuArray = readFromFile("Menu List");
}
setUpView(menuArray);
Теперь, очевидно, это не будет работать, потому что setUpView не может видеть, что menuArray была создана, так как он находится внутри, если заявление. Как я могу использовать массив String (вместо простого использования ListArray), используя инструкцию if для определения его содержимого?
Я должен упомянуть, так как теперь я написал проблему, я уже вижу несколько работ вокруг. Например, я могу просто комбинировать методы записи и чтения, и тогда мне не нужно будет использовать оператор if здесь. Или я мог бы просто работать с ListArray до последней минуты или установить String [] намного дольше, чем мне нужно, и перестать вытягивать его, когда он попадает в пустой слот. Тем не менее, использование String [] в инструкции if возникло раньше, и я хотел бы знать, как реализовать такую вещь, если это возможно. Мысли?
это не имеет ничего общего с Android, то, как массивы (не только строковые массивы) работают в Java. – njzk2
По-моему, использование статической реализации массива неэффективно, потому что, когда вы изменяете его размер (arrayList), то, что на самом деле происходит, заключается в том, чтобы объединить в основной памяти в два раза больше его размера, а затем пересечь массив и обновить второй. Первый собирает мусор. В реализациях для динамических списков есть java-сборка, почему вы их не используете? – nmargaritis
Почему бы вам не ограничить себя использованием только массивов? (а также вы можете заметить, что ваша проблема не связана с тем, что массивы являются неизменяемыми, поскольку у вас будет такая же проблема с любым объектом, поскольку это только вопрос объема.) – njzk2