Как отобразить список рекордов как на устройстве, так и глобально

Я прочитал несколько руководств, но не могу точно определить, что мне нужно

Я пытаюсь добавить список рекордов (около 10 строк) от людей, которые играли в игру на моем устройстве, а затем на другой вкладке я хочу получить список рекордов от игроков со всего мира.

В настоящее время у меня есть просто строка с сохраненным высоким баллом, а имя было введено вручную (как мне сохранить каждый высокий балл с именем?)

Это образ того, что у меня есть

введите здесь описание изображения

Это изображение того, что мне нужно

введите здесь описание изображения

что мне нужно

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

мои коды ниже

Gamepanel.java

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

private void setBestScore(int bestScore) {
    SharedPreferences.Editor editor = getContext().getSharedPreferences("gamepanel", MODE_PRIVATE).edit();
    editor.putInt("bestScore", bestScore);
    editor.apply();
}

Tab1.java

Здесь я получаю сохраненный рекорд

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    //Returning the layout file after inflating
    //Change R.layout.tab1 in you classes
    View myInflatedView = inflater.inflate(R.layout.tab1, container,false);

    TextView tv = (TextView) myInflatedView.findViewById(R.id.textView1);
    tv.setText("Name:"+ " Ken");

    TextView t = (TextView) myInflatedView.findViewById(R.id.textView2);
    t.setText("Score: " +getBestScore());

    return myInflatedView;

}

protected int getBestScore() {
    SharedPreferences prefs = getContext().getSharedPreferences("gamepanel", MODE_PRIVATE);
    return prefs.getInt("bestScore", 0);
}

Пожалуйста, я был бы признателен за любую помощь или любой шаг вперед в том, как это сделать.


person Community    schedule 30.07.2017    source источник


Ответы (2)


Я вижу, вы уже знакомы с использованием общих настроек, так как используете их для хранения лучших результатов. Я бы посоветовал сначала лучше ознакомиться с концепциями возможных вариантов хранения, которые в настоящее время поддерживает Android:

https://developer.android.com/guide/topics/data/data-storage.html

Вы хотите, чтобы ваши данные оставались постоянными на устройстве, простой массив/ArrayList или любой другой набор данных можно использовать только для хранения в памяти на время немедленного использования. Он будет существовать, пока ваше приложение используется, и вскоре после этого будет удален, как только Android поймет, что он больше не нужен. В приведенной выше документации описаны возможные варианты постоянного хранения данных.

По сути, общие настройки — это один из ваших вариантов, и таким образом вы можете хранить простые пары ключ-значение, которые будут постоянными на устройстве. Если хотите, можно хранить и массивы данных, но я не думаю, что этот способ можно рекомендовать. Общие настройки отлично подходят для хранения и повторного использования простых одиночных значений, особенно если они не обновляются часто. Для любого набора различных значений я бы рекомендовал простую базу данных SQLite: https://developer.android.com/guide/topics/data/data-storage.html#db

Они очень легкие, поэтому они не добавляют большой нагрузки для вашей игры, а также могут хранить дополнительные данные для вас, если вы потратите свою игру. Затем вы можете прочитать любое количество предыдущих рекордов, так как вы можете сохранить только 10 значений, но вы также можете сохранить больше и выбрать отображение только 10. В этом случае вы можете, например, загрузить 10 лучших результатов из БД, хранить их в локальной памяти в виде массива и отображать в простом ListView.

Теперь, когда дело доходит до глобального хранения значений — я полагаю, вы думаете о глобальных списках лидеров? В этом случае вам понадобится внешний сервер, хранящий все самые высокие баллы, приложение является только клиентом и не может напрямую общаться с другими клиентами (поскольку оно не может общаться со ВСЕМИ клиентами одновременно). Системе нужен сервер, который централизован и получает информацию от клиентских приложений, а затем делится с ними этой информацией. Это гораздо сложнее, чем может объяснить один ответ, поэтому я считаю, что вам придется немного больше прочитать о создании сервера и о том, как приложения могут взаимодействовать с ним (например, через REST API).

person Sosoel    schedule 30.07.2017

Использование SharedPreferences для этой цели не очень полезно для вас. Я предлагаю использовать базу данных. Android имеет в качестве СУБД Sqlite. Если вы не знаете, что это такое, здесь есть простое руководство.

СУБД и база данных отношений

Затем вы должны знать, что для вставки и запроса данных из базы данных существует стандартный язык, называемый SQL (я думаю, структурированный язык запросов)

Введение в sql

Тогда вы должны знать, не используете ли вы этот андроид, поскольку СУБД использует Sqlite, и из вашего кода Java вы можете использовать его для хранения и запроса данных.

Вот небольшой гайд

SQLite android

Я надеюсь, что был полезен для вас.

person P.Carlino    schedule 30.07.2017