首页 > 解决方案 > 能够根据选择的选项选择正确的文本文件

问题描述

我正在开发一个 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)
...

标签: javaandroid

解决方案


为此,您可以传递一个 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);
    }
} 

在下一个活动中,您可以收到意图。获取值并根据打开的内容页面进行检查。


推荐阅读