java - 能够根据选择的选项选择正确的文本文件
问题描述
我正在开发一个 android 应用程序,只需要一些帮助来选择正确的文本文件并计算按钮的点击次数。
所以基本上我有两个活动课程。应用程序的主页存储在MainActivity
该类中,另一个类称为Content
课堂上MainActivity
有三个按钮:笑话、诗歌和有趣的故事
基本上,无论用户从这三个按钮中选择哪个选项,下一页(Content
类)上的内容都会显示与所选选项相关的正确文本段落。
目前,当用户选择笑话并且它显示的内容是从jokes.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
文件中抓取内容,如果他们选择,Funny Stories
那么它将从funnystories.txt
文件中抓取。此外,如果他们选择该Select Another
按钮,它将从正确的文本文件中随机选择一个新条目。就像我说的那样,我所做的代码仅适用于笑话,但我需要使其更具动态性,以便它也适用于诗歌和有趣的故事,具体取决于用户从主页选择的选项。
最后一件事也是如此。我想要计算用户点击笑话、诗歌、有趣故事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);
}
}
在下一个活动中,您可以收到意图。获取值并根据打开的内容页面进行检查。
推荐阅读
- amazon-cloudfront - In Troposphere, how do I add CustomOriginConfig object
- java - 在 GUI 的 jcombobox 中显示来自数据库的详细信息
- angular6 - Angular 6 *ngFor 不更新视图
- flutter - 如何从飞镖颤振中的异步函数返回数据?
- c++ - 我是否正确使用了头文件?
- javascript - 将 json 数据作为属性分配给 html 元素时 JSON 输入意外结束
- node.js - 通过 OAuth 2.0 Playground 发送 Gmail
- drupal-8 - 通过 Drupal 8 中的控制器创建自定义模块以呈现自定义表单
- html - 容器内的CSS模糊过滤器没有剪辑
- c - 有人可以告诉我分段错误的原因 - 此程序中的(核心转储)错误