如何在设备和全局上显示高分列表

时间:2017-07-30 12:08:23

标签: java android android-savedstate

我已阅读了几篇教程,但无法准确确定我需要的内容

我试图在我的设备上玩游戏的人添加一个高分(大约10行)列表,然后在另一个标签中,我希望得到世界各地玩家的高分列表。

目前我现在拥有的只是一行保存的pref高分,而名字是手动输入的(如何用名字保存每个高分?)

这是我所拥有的图像

enter image description here

这是我需要的图像

enter image description here

我需要的是

  1. 如何保存每个高分的名称?
  2. 如何保存我的10排高分榜单?(我猜测阵列?)
  3. 如何在全球范围内以10个最高得分填充我的排行榜标签?(每个都有名称)
  4. 我的代码在

    之下

    Gamepanel.java

    这是我保存高分的地方,每个新的高分都会覆盖前一个,但我需要一个列表。

    Threaded

    Tab1.java

    这是我检索已保存的高分

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

    如果有任何帮助或任何有关如何进行此操作的任何进展,我将不胜感激

2 个答案:

答案 0 :(得分:0)

我可以看到您已经熟悉共享首选项的使用,因为您正在使用它们来存储最佳分数。我建议首先要更熟悉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.在这种情况下,您可以例如从DB加载10个热门命中,将它们作为数组存储在本地内存中,并以简单的ListView显示。

现在,当涉及到全球存储价值时 - 我假设您正在考虑全球排行榜?在这种情况下,您需要有一个存储所有最高分的外部服务器,该应用程序只是一个客户端,不能直接与其他客户端通信(因为它不能同时与所有客户端通信)。系统需要一个集中的服务器,并从客户端应用程序中检索信息,然后与它们共享信息。这比单个答案解释的要复杂得多,所以我相信你将不得不阅读更多关于构建服务器以及应用程序如何与之交谈的内容(例如通过REST API)。

答案 1 :(得分:0)

为此目的使用SharedPreferences对您来说并不是那么有用。 我建议使用数据库。 Android有DBMS Sqlite。如果你不知道他们在这里有什么,那就有一个简单的指南。

DBMS and relationship database

然后你必须知道从数据库中插入和查询数据有一种称为SQL的标准语言(我猜是结构化查询语言)

Introduction to sql

然后你必须知道你是不是那个android,因为DBMS使用Sqlite,你可以用java代码来存储和查询数据。

这里有一个小指南

SQLite android

我希望对你有所帮助。