Java 如何在不创建数据库的情况下保存谜语游戏的答案?

Java 如何在不创建数据库的情况下保存谜语游戏的答案?,java,android,Java,Android,我创建了一个问答游戏,有不同的级别,每个级别包含一个问题。我不是用数据库创建的。我只是用绳子。当用户在第一级回答问题时,他被带到第二级,但当用户返回到第一级时,他必须再次键入答案,即使他以前已经解决了这个问题。JAVA中是否存在这样一种方法,可以在不创建数据库的情况下将答案保存在类型面板中(如果用户已经解决了问题)??此外,在“类型”面板中键入时,用户必须删除“此处键入…”,然后回答。当用户点击键入“此处键入…”时,是否会自动删除 下面是我的level one activity.xml: <

我创建了一个问答游戏,有不同的级别,每个级别包含一个问题。我不是用数据库创建的。我只是用绳子。当用户在第一级回答问题时,他被带到第二级,但当用户返回到第一级时,他必须再次键入答案,即使他以前已经解决了这个问题。JAVA中是否存在这样一种方法,可以在不创建数据库的情况下将答案保存在类型面板中(如果用户已经解决了问题)??此外,在“类型”面板中键入时,用户必须删除“此处键入…”,然后回答。当用户点击键入“此处键入…”时,是否会自动删除

下面是我的level one activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:weightSum="1"
    android:textAlignment="center"
    android:id="@+id/level1">

    <TextView
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:text="What has 88 keys but cannot open a single door?"
        android:id="@+id/que1"
        android:width="255dp"
        android:textSize="30dp"
        android:layout_margin="50dp"
        android:textStyle="italic"
        android:gravity="center" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/type1"
        android:layout_gravity="center_horizontal"
        android:text="Type here..." />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Check answer..."
        android:id="@+id/check1"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

此外,在有键盘的地方会显示烤面包片。是否要将toast屏幕移动到屏幕上清晰可见的位置?

您可以使用SharedReferences 写入共享首选项

SharedPreferences sharedPref = context.getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
阅读

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

这很简单。只需创建一个文件来存储信息。你可以用两种方法来做。 一个是保存一个简单的xml或json,第二个是创建答案的模型,并序列化它们的集合,然后将它们保存在文件中


请记住,您应该以某种结构方式来完成:json、xml、序列化类。以后使用它会简单得多,因为您有几个选项可以尝试

一个选项是@Stultuske所说的,您可以尝试存储在用户设备上的XML或TXT文件。这(以及数据库)将在应用程序会话之间保持

另一个选项是可以创建一个单例类。 例如,一个名为Globals的类(如下所示):

然后可以使用
Globals g=Globals.getInstance()调用它。这将仅在应用程序实例中持续存在;但是,如果您想在整个应用程序发布过程中存储它,您可以尝试使用@shaikhmanzoor所述的XML/TXT或SharedReferences


此外,通常使用camelCase-ie
answers
而不是
answers
,或者
typeH
而不是
typeH
来定义变量名。查看Google Java编码的指导原则。

对于您的第一个问题,只需使用SharedReferences以如下方式保存和获取数据
SharedReferences sharedPref=context.getPreferences(context.MODE\u PRIVATE);
SharedPreferences.Editor=sharedPref.edit();
编辑器.putInt(“级别不回答”,回答由用户给出);
commit()


对于第二个问题,您正在EditText中使用android:text=“在此处键入…”。只需将该行替换为android:hint=“在此处键入…”

我将提供两种方法:

创建一个
levelEnowned
类,如下所示:

public class LevelEarned {
 public static int level = 0;
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("player_level",1); //Depends of the level he have passed.
editor.apply();
public SharedPreferences preferences;
 public static class LevelPlayer(){

     public int static getLevelPlayer(){

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
     int level = preferences.getInt("player_level", 0); //level is the current level of the playe


     return level;
     }

  }
每次您获得
意图
(因为用户正确回答了问题)只需键入:

LevelEarned.level = 1; // 1 depends with the level you have answered correctly
这是我用来做这件事的最好方法,叫做


您可以使用SharedReferences保存任何基本数据:布尔值、浮点值、整数、长数和字符串。此数据将在用户会话中保持不变(即使您的应用程序被终止)

您必须做的第一件事是将此数据存储在
SharedReferences
上,并使用
编辑器执行此操作,如下所示:

public class LevelEarned {
 public static int level = 0;
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("player_level",1); //Depends of the level he have passed.
editor.apply();
public SharedPreferences preferences;
 public static class LevelPlayer(){

     public int static getLevelPlayer(){

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
     int level = preferences.getInt("player_level", 0); //level is the current level of the playe


     return level;
     }

  }
注意 我猜当用户接受问题时,您会立即执行此操作,因此,您将在
按钮上单击
,因此您必须作为上下文传递
v.getContext()
,如果您没有使用
按钮,请单击
并使用
onCreate()
只需调用
this
引用您的
上下文即可

要获取存储的数据(级别),您需要执行以下操作:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int level = preferences.getInt("player_level", 0);
让我们给你解释一下

第一个参数是查找
SharedReference
的关键,因此它不会更改,第二个参数是默认值,在找不到任何
“玩家级别”
SharedReference
时使用

希望它能帮助您继续使用代码:)

编辑2 创建
SharedReferences首选项作为全局变量,如下所示:

public class LevelEarned {
 public static int level = 0;
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("player_level",1); //Depends of the level he have passed.
editor.apply();
public SharedPreferences preferences;
 public static class LevelPlayer(){

     public int static getLevelPlayer(){

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
     int level = preferences.getInt("player_level", 0); //level is the current level of the playe


     return level;
     }

  }
然后在
onClick()
方法中添加这些通道:

check.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Perform action on click
            //Here you must get the text on your EditText
            String Answer = (String) typeh.getText().toString(); //here you have the text typed by the user
            //You can make an if statement to check if it's correct or not
            if(Answer.equals("4") || (Answer.equals("four")))
            {
                preferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
                SharedPreferences.Editor editor = preferences.edit();
                editor.putInt("player_level",1); //Depends of the level he have passed.
                editor.apply();
                //Create a Toast because it's correct
                Toast.makeText(OneActivity.this, "Correct!",
                        Toast.LENGTH_LONG).show();
            }
            else{
                //It's not the correct answer
                Toast.makeText(OneActivity.this, "Wrong! Try Again",
                        Toast.LENGTH_LONG).show();
            }
        }
    });
如果您想知道您只需执行的级别:

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
int level = preferences.getInt("player_level", 0); //level is the current level of the player.
编辑3 创建一个类,如下所示:

public class LevelEarned {
 public static int level = 0;
}
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(v.getContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("player_level",1); //Depends of the level he have passed.
editor.apply();
public SharedPreferences preferences;
 public static class LevelPlayer(){

     public int static getLevelPlayer(){

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
     int level = preferences.getInt("player_level", 0); //level is the current level of the playe


     return level;
     }

  }
每次你想询问玩家的级别时,你都会:

int Level = LevelPlayer.getLevelPlayer(); //that's the level
因此,在每个问题之后,你可以询问级别并提出下一个问题

编辑4 我做了一些更改,删除了您的lvl类,并将以下代码放入:

public class lvl{
public Context mcontext;

public lvl(Context context){
    this.mcontext = context;

}
public int getLevelPlayer(){

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mcontext);
    int level = preferences.getInt("player_level", 0); //level is the current level of the playe
    return level;
}
然后在您的
main活动中(或您需要知道玩家级别的任何地方),您必须放置以下内容:

public levelplayer mlevelplayer;
然后在
onCreate()中添加以下内容:

mlevelplayer = new levelplayer(this);
int level  = mlevelplayer.getLevelPlayer();

txt文件,xml文件,…@Bik查看我的编辑让我知道它是否有效,如果无效,我将更新代码仍然有问题??嗯,Bik?你没有将任何答案标记为正确答案,这对你没有帮助?嘿,斯基佐,对不起,这是一篇迟到的帖子,我有点忙。我不明白我到底应该在哪里粘贴最后一行,以及在关卡玩完后如何在游戏中保存正确答案?我说的是最后一个代码:SharedReferences preferences=PreferenceManager.getDefaultSharedReferences(this);int-level=preferences.getInt(“玩家级别”,0)//级别是玩家的当前级别。你必须把它放在任何你想知道玩家级别的地方,在你的第一个活动中,第二个,任何地方。我要更新我的答案吗?你接受这个答案吗?