Java 能够根据所选选项选择正确的文本文件
我正在开发一个android应用程序,只是需要一些帮助来选择正确的文本文件和记录按钮的点击次数 所以基本上我有两个活动课。应用程序的主页存储在Java 能够根据所选选项选择正确的文本文件,java,android,Java,Android,我正在开发一个android应用程序,只是需要一些帮助来选择正确的文本文件和记录按钮的点击次数 所以基本上我有两个活动课。应用程序的主页存储在MainActivity类中,另一个类称为Content 在MainActivity类中,有三个按钮: 笑话, 诗 还有有趣的故事 基本上,无论用户从这三个按钮中选择哪个选项,下一页的内容(contentclass)都将显示与所选选项相关的正确文本段落 当前,当用户选择笑话时,“我的代码”适用于笑话,并且它显示的内容是从crooks.txt文件中随机选择的
MainActivity
类中,另一个类称为Content
在MainActivity
类中,有三个按钮:
笑话,
诗
还有有趣的故事
基本上,无论用户从这三个按钮中选择哪个选项,下一页的内容(content
class)都将显示与所选选项相关的正确文本段落
当前,当用户选择笑话时,“我的代码”适用于笑话,并且它显示的内容是从crooks.txt
文件中随机选择的
主要活动
public class MainActivity extends AppCompatActivity{
final Context context = this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button jokesButton = findViewById(R.id.button_jokes);
Button poemsButton = findViewById(R.id.button_poems);
Button funnyStoriesButton = findViewById(R.id.button_funny_stories);
jokesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openContentPage();
}
});
}
private void openContentPage(){
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
startActivity(intentContentPage);
}
}
内容
public class Content extends AppCompatActivity{
Button backButton;
Button selectAnotherButton;
TextView contentText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_content);
backButton = findViewById(R.id.button_back);
selectAnotherButton = findViewById(R.id.button_select_another);
contentText = findViewById(R.id.content_text);
contentText.setMovementMethod(new ScrollingMovementMethod());
setContent();
selectAnotherButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setContent();
}
});
backButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick (View v){
backToMainActivity();
}
});
}
private void backToMainActivity(){
Intent intentMainActivity = new Intent(this, MainActivity.class);
startActivity(intentMainActivity);
}
private void setContent(){
String text = "";
String randomJoke = "";
try {
// file to inputstream
InputStream input = getAssets().open("files/jokes.txt");
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
// byte buffer into a string
text = new String(buffer);
String[] jokes = text.split("###");
Random rand = new Random();
int randomIndex = rand.nextInt(jokes.length);
randomJoke = jokes[randomIndex];
}
catch (Exception e) {
System.out.println(e);
}
contentText.setText(randomJoke);
}
}
然而,这个代码需要被操作,以便它包括诗歌和有趣的故事。基本上,如果用户选择诗歌,那么它将从Poems.txt
文件中获取内容;如果用户选择滑稽故事
,那么它将从funnystories.txt
文件中获取内容。此外,如果他们选择选择另一个按钮,它将从正确的文本文件中随机选择一个新条目。正如我所说,我所做的代码只适用于笑话,但我需要使其更具动态性,以便它也适用于诗歌和有趣的故事,这取决于用户从主页上选择的选项
还有最后一件事。我想要一个用户点击MainActivity
中的笑话、诗歌、有趣故事的次数计数,并将“选择另一个”按钮添加到计数中
如何实现这一点
更新:
尝试接收意图时,我收到来自此代码的以下错误:
private void setContent(){
String text = "";
String randomText = "";
String keyPageValue = getIntent().getStringExtra("keyPage");
String fileName = "";
if(keyPageValue.equals("0")){
fileName.equals("files/jokes.txt");
}
else if (keyPageValue.equals("1")){
fileName.equals("files/poems.txt");
}
else if (keyPageValue.equals("2")){
fileName.equals("files/funnystories.txt");
}
try {
InputStream input = getAssets().open(fileName);
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
// byte buffer into a string
text = new String(buffer);
String[] splitText = text.split("###");
Random rand = new Random();
int randomIndex = rand.nextInt(splitText.length);
randomText = splitText[randomIndex];
}
catch (Exception e) {
System.out.println(e);
}
contentText.setText(randomText);
}
堆栈跟踪:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mima.chilltime, PID: 18747
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mima.chilltime/com.mima.chilltime.Content}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3150)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3260)
...
为此,您可以传递一个int值,该值表示用户单击的按钮类型:-
jokesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openContentPage(0);
}
});
poemsButton .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openContentPage(1);
}
});
funnyStoriesButton .setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openContentPage(2);
}
});
private void openContentPage(int v) {
if(v == 0) {
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
intent.putExtra("keyPage",0);
startActivity(intentContentPage);
}
else if(v == 1) {
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
intent.putExtra("keyPage",1);
startActivity(intentContentPage);
}
else {
Intent intentContentPage = new Intent(MainActivity.this, Content.class);
intent.putExtra("keyPage",2);
startActivity(intentContentPage);
}
}
在下一个活动中,您可以接收到意图。获取值并根据该值进行检查,然后打开内容页。那么您想在两个活动之间传递数据吗?看见至于计算用户单击的次数,您可以使用。另外,不要重新启动MainActivity返回,只需调用finish()
。我会读一读Nicolas,谢谢you@Nicolas问题,如果我从一个值中传递一个值,我理解意图是如何工作的,但是当我从可能的三个值中传递一个值时,我应该有三个意图吗?我想看看这个例子,我假设得到字符串,然后根据我提取的字符串执行一个if语句?我想我只需要在实现这一点上得到一点帮助您可以传递一个字符串值,即文件名,假设它在MainActivity中可用。不过,更好的做法是将它们存储在helper类中,或者使用Raj的方法。我会尝试一下,然后再给你回复。大约10分钟,我提供了一个更新,基本上,我在尝试检索意图时遇到了一个错误,因此我想向您展示您对我正在做的事情的输入,但不正确。因此,我一直在查看共享首选项,并想知道如何正确实现单击计数,这也给我带来了一个问题,然后才尝试在意图上回答您的问题传递一个int值。因此,您必须执行:-int keyPageValue=getIntent().getIntExtra(“keyPage”);。并将其比较为。如果(keyPageValue==0){fileName=“files/crooks.txt”;}它希望在:int-keyPageValue=getIntent().getIntExtra(“keyPage”)中的“keyPage”后面有一个deafolt int值