0

我已经阅读了几个教程,但无法确定我需要什么

我正在尝试添加在我的设备上玩过游戏的人的高分列表(大约 10 行),然后在另一个选项卡中,我想获得来自世界各地玩家的高分列表。

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

这是我所拥有的图像

在此处输入图像描述

这是我需要的图像

在此处输入图像描述

我需要的是

  1. 如何保存每个高分的名字?
  2. 如何保存我的 10 行高分列表?(我猜是一个数组?)
  3. 如何使用全球 10 个最高分填充我的排行榜选项卡?(每个都有名称)

我的代码如下

游戏面板.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);
}

请我很感激任何帮助或任何关于如何解决这个问题的步骤

4

2 回答 2

0

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

DBMS 和关系数据库

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

sql简介

然后您必须知道您是否不使用 Sqlite 作为 DBMS 的 android 并且从您的 java 代码中您可以使用它来存储和查询数据。

这里有一个小指南

SQLite 安卓

我希望对你有所帮助。

于 2017-07-30T13:51:11.910 回答
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 个。在这种情况下,您可以例如从数据库加载 10 个热门命中,将它们作为数组存储在本地内存中,并显示在简单的 ListView 中。

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

于 2017-07-30T13:40:36.120 回答