Какие коллекции Android использовать? [закрыто]

Просто создаю небольшое приложение для Android, и мне нужно хранить набор данных, и я не уверен, следует ли использовать объект, массив, массив списков, хэш-карту и т. д.

Он должен иметь возможность хранить строки и целые числа (например, имя пользователя, счет, категорию, количество ходов).

Он должен иметь возможность хранить переменное число команд.

В настоящее время возникают проблемы, когда я пытаюсь сохранить его как объект, но я не буду увеличивать значение Score int.

Какую коллекцию мне следует использовать для этого случая, и когда я должен использовать каждый из них в других случаях?

EDIT

Хорошо, так и сделал, но я продолжайте получать исключение NullPointerException, когда я пытаюсь получить к нему доступ/увеличить. Я могу только предположить, что он не может правильно получить доступ к командам var из upScore

Итак, мой onCreate выглядит следующим образом

  public ArrayList  team; public  int currentTeam; public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState);  setContentView (R.layout.activity_game);  currentTeam = 0;  Список  команд = новый ArrayList  ();  team.add (новая команда («Команда 1»));  team.add (new Team ("Team 2"));}  

тогда upScore вызывается при нажатии кнопки. фатальное исключение находится в этой строке

  public void upScore (int team_key) {team.get (0) .score ++;}  

А вот и мой объект Team

  class Team {public String name;  общественная оценка int;  публичная категория String;  публичные int повороты;  общедоступная команда (String teamName) {name = teamName;  }}  

Создайте свой собственный класс, представляющий объекты, которые могут содержать нужные вам данные, например:

  class Team {public String teamName;  общественная оценка int;  публичная категория String;  public int numberOfTurns;  public Team (...) {...}//конструктор}  

Затем используйте любую структуру данных, которую вы хотите, например, arrayylist:

  List  list = new ArrayList  ();  

Чтобы добавить элементы в список:

  list.add (new Team (...));  

Чтобы увеличить счет первой команды в списке:

  list.get (0) .score ++;  

и так далее …


2

Изменить

Список team = new ArrayList ();

в

team = new ArrayList ();

См.: Ваши объявления скрывают переменные-члены.

Улучшите этот ответ
отредактировано 23 мая 2017, 11:43
Сообщество ♦
111 серебряных значков
ответил 27 августа 2012 в 17:26
  • 1
    Также подумайте об использовании частных переменных вместо общедоступных. — user802421, 27 августа 2012, 17:29
  • принятый ответ отправляется @ Eng.Fouad за то, что он провел меня на 90% пути, но rep ++ для вас тоже 🙂 thx! — Лошадь, 27 августа 2012, 18:54
  • Это должен быть принятый ответ. — Евгений Картоев 17 окт., В 18:41
добавить комментарий |

Изменить

Список team = new ArrayList () ;

в

team = new ArrayList ();

См.: Ваши объявления скрывают переменные-члены.



ИСПОЛЬЗОВАНИЕ коллекций в Android

Я смотрел этот код при просмотре Stackoverflow

CODE ::

  открытый класс MainActivity расширяет Activity {//Объявление переменных JSONObject  jsonobject;  JSONArray jsonarray;  ListView listview;  ListViewAdapter адаптер;  ProgressDialog mProgressDialog;  ArrayList > arraylist;  статическая строка NAME = "ранг";  статическая строка TYPE = "страна";  статическая строка DISTANCE = "расстояние";  static String RATING = "рейтинг";  статическая строка FLAG = "флаг";  статическая строка PRICE = "цена";  @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); //Получить представление из listview_main.xml setContentView (R.layout.listview_main); //Найдите представление списка в listview_main.xml listview = (ListView) findViewById (R.id.listview); //Выполнение DownloadJSON AsyncTask new DownloadJSON (). Execute ();  }//DownloadJSON закрытый класс AsyncTask DownloadJSON расширяет AsyncTask  {@Override protected void onPreExecute () {super.onPreExecute (); //Создание диалогового окна прогресса mProgressDialog = new ProgressDialog (MainActivity.this); //Установить заголовок диалогового окна прогресса//mProgressDialog.setTitle("Получить информацию "); //Устанавливаем сообщение о ходе выполнения mProgressDialog.setMessage ("Загрузка ...");  mProgressDialog.setIndeterminate (ложь); //Показать диалог прогресса mProgressDialog.show ();  } @Override protected Void doInBackground (Void ... params) {//Создаем массив arrayylist = new ArrayList > (); //Получить объекты JSON с заданного URL-адреса jsonobject = JSONfunctions.getJSONfromURL ("-------------- URL ----------");  try {//Найдите имя массива в JSON jsonarray = jsonobject.getJSONArray ("ARRAY");  for (int i = 0; i  map = new HashMap  ();  jsonobject = jsonarray.getJSONObject (i); //Получить объекты JSON map.put (MainActivity.NAME, jsonobject.getString ("collegeNAME"));  map.put (MainActivity.TYPE, jsonobject.getString ("collegeTYPE"));  map.put (MainActivity.FLAG, jsonobject.getString ("collegeIMAGE"));  map.put (MainActivity.DISTANCE, jsonobject.getString ("collegeDISTANCE"));  map.put (MainActivity.RATING, jsonobject.getString ("collegeRATING"));  map.put (MainActivity.PRICE, jsonobject.getString ("collegePrice")); //Помещаем объекты JSON в массив arrayylist.add (map);  }} catch (JSONException e) {Log.e ("Ошибка", e.getMessage ());  e.printStackTrace ();  } return null;  } @Override protected void onPostExecute (Void args) {//Передаем результаты в ListViewAdapter.java adapter = new ListViewAdapter (MainActivity.this, arraylist); //Устанавливаем адаптер на ListView listview.setAdapter (adapter); //Закройте диалоговое окно прогресса mProgressDialog.dismiss ();  }}}  

  • Мой вопрос: почему мы используем коллекцию в Android?
  • Какая польза?
  • Почему хэш-карта добавляется в ArrayList в приведенном выше коде?
  • Разве мы не можем напрямую установить представления в android без коллекции (я пробовал работать с dosent при работе с группа пар ключ-значение)

. ~ Я новичок, поэтому не торопитесь с ответами на мои вопросы


Я не знаю, как ответить на ваши первые 2 вопроса о коллекциях … но я попробую.

1, 2) Коллекции хороши для хранения групп информации вместе и доступно через 1 переменную. Они также упрощают итерацию по ним, что делает их идеальными для таких вещей, как адаптеры ListView, поскольку это также список (или коллекция).

Если у вас нет массива, примите во внимание следующее.

  String var1 = "hi1"; String var2 = "hi2"; String var3 = "hi3"; String var4 = "hi4"; String var5 = "hi5"; String  var6 = "hi6"; String var7 = "hi7"; String var8 = "hi8"; String var9 = "hi9";//делаем что-нибудь с переменными Toast.makeText (this, var1, Toast.LENGTH_SHORT) .show ()  ; Toast.makeText (this, var2, Toast.LENGTH_SHORT) .show (); Toast.makeText (this, var3, Toast.LENGTH_SHORT) .show (); Toast.makeText (this, var4, Toast.LENGTH_SHORT) .show (  ); Toast.makeText (this, var5, Toast.LENGTH_SHORT) .show (); Toast.makeText (this, var6, Toast.LENGTH_SHORT) .show (); Toast.makeText (this, var7, Toast.LENGTH_SHORT) .show  (); Toast.makeText (this, var8, Toast.LENGTH_SHORT). show (); Toast.makeText (this, var9, Toast.LENGTH_SHORT) .show ();  

Теперь рассмотрите это, если у вас есть массивы:

  ArrayList  vars = new ArrayList  

Намного, намного проще работать.

3) Hashmap добавляется в массив, потому что автор хотел сохранить коллекцию отдельных пар имя/значение. У вас не может быть нескольких ключей с одним и тем же значением в Hashmap , поэтому, если вы этого хотите, вы должны создать новый Hashmap. Их добавление в массив должно было сохранить его аккуратность, а затем позволить автору передать массив адаптеру ListView для отображения значений пользователю с использованием встроенного механизма Android.

В основном это автор создал эту Иерархию:

  item1 name type flag distance rating priceitem2 name type flag distance rating priceitem3 name type flag distance rating price ... etc ...  

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

4) Вы можете устанавливать значения напрямую , но работа с адаптерами в ListViews значительно упрощает работу. Вы создаете массив, передаете массив в список, и bada-bing-bada-boom, вот и ваш список. В противном случае вы будете создавать элементы ListView и самостоятельно настраивать отображаемый текст для каждого элемента. Подобно тому, почему коллекции полезны, когда у вас много переменных одного типа, передача этой коллекции в ListView значительно упрощает кодирование, поддержку и устранение неполадок, не говоря уже о том, что это просто работает!

Надеюсь, это поможет! Мы все когда-то новички 🙂


0

Этот фрагмент кода будет заполнять ListView, есть несколько способов сделать это. Я считаю, что в этом случае кодировщиком является SimpleAdapter http://developer.android.com/reference/android/widget/SimpleAdapter.html.

Некоторые думают так:

 //В этом случае значение os NAME отображается в android.R.id.text1 (TextView)//а PRICE отображается в android.R.id.text2 (TextView) String [] из  = новая строка [] {MainActivity.NAME, MainActivity.PRICE}; //Сопоставить keysint [] с = new int [] {android.R.id.text1, android.R.id.text2}; //Элемент макета списка viewsSimpleAdapter adapter = new SimpleAdapter (context, arraylist, android.R.layout.simple_list_item_2, String [] from, int [] to); listview.setAdapter (adapter);  

Улучшить этот ответ
26 сен 2013 в 13:10
добавить комментарий |

Этот фрагмент кода будет заполнять ListView, есть несколько способов сделай это. Я считаю, что в этом случае кодировщиком является SimpleAdapter http://developer.android.com/reference/android/widget/SimpleAdapter.html.

Некоторые думают так:

 //В этом случае значение os NAME отображается в android.R.id.text1 (TextView)//и PRICE отображается в строке android.R.id.text2 (TextView)  [] from = new String [] {MainActivity.NAME, MainActivity.PRICE};//Сопоставить keysint [] с = new int [] {android.R.id.text1, android.R.id.text2};// Представления элемента макета спискаSimpleAdapter adapter = new SimpleAdapter (context, arraylist, android.R.layout.simple_list_item_2, String [] from, int [] to); listview.setAdapter (адаптер);  

Оцените статью
logicle.ru
Добавить комментарий