Java 如何在不创建数据库的情况下保存谜语游戏的答案?
我创建了一个问答游戏,有不同的级别,每个级别包含一个问题。我不是用数据库创建的。我只是用绳子。当用户在第一级回答问题时,他被带到第二级,但当用户返回到第一级时,他必须再次键入答案,即使他以前已经解决了这个问题。JAVA中是否存在这样一种方法,可以在不创建数据库的情况下将答案保存在类型面板中(如果用户已经解决了问题)??此外,在“类型”面板中键入时,用户必须删除“此处键入…”,然后回答。当用户点击键入“此处键入…”时,是否会自动删除 下面是我的level one activity.xml:Java 如何在不创建数据库的情况下保存谜语游戏的答案?,java,android,Java,Android,我创建了一个问答游戏,有不同的级别,每个级别包含一个问题。我不是用数据库创建的。我只是用绳子。当用户在第一级回答问题时,他被带到第二级,但当用户返回到第一级时,他必须再次键入答案,即使他以前已经解决了这个问题。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-ieanswers
而不是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)//级别是玩家的当前级别。你必须把它放在任何你想知道玩家级别的地方,在你的第一个活动中,第二个,任何地方。我要更新我的答案吗?你接受这个答案吗?