-2

Why does my app keep crashing in both emulator and in OnePlus Nord. Android studio doesnt detect any error with my code.

I wanted my app to show one sentence randomly when I click on the button.

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.lang.String;
import java.lang.StringBuilder;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    ArrayList<String> SList;
    TextView Sentence;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Sentence = (TextView) findViewById(R.id.Sentence);
        Button button = findViewById(R.id.button);

        button.setOnClickListener((View v) -> {
            Sentence.setText(getRandomFromList(SList));
        });
    };

    private ArrayList<String> getSampleList() {
        ArrayList<String> list = new ArrayList();
        list.add("Apple");
        list.add("Banana");
        list.add("Ciku");
        list.add("Danny ate the other fruits.");
        return list;
    }

    private String getRandomFromList(ArrayList<String> list) {
        Random rand = new Random();
        return list.get(rand.nextInt(list.size()));
    }
}
a_local_nobody
  • 7,947
  • 5
  • 29
  • 51

2 Answers2

0

Your ArrayList<String> SList; has not been initialised.

 @Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Sentence = (TextView) findViewById(R.id.Sentence);
    Button button = findViewById(R.id.button);

    //Add this one.
    SList = new ArrayList<String>();

    button.setOnClickListener((View v) -> {
        Sentence.setText(getRandomFromList(SList));
    });
}

And this one seems incorrect as well. Did you mean this:

private String getRandomFromList(ArrayList<String> list) {
    Random rand = new Random();
    list = getSampleList();
    return list.get(rand.nextInt(list.size() - 1));
}

Or maybe this one:

private String getRandomFromList(ArrayList<String> list) {
    Random rand = new Random();
    List<String> sampleList = getSampleList();
    list.add(rand.nextInt(sampleList.size() - 1));
    return list.get(rand.nextInt(list.size() - 1));
}
Darkman
  • 2,941
  • 2
  • 9
  • 14
0

You are declaring SList but want to use getSampleList(). So instead of SList just pass getSimpleList() to your method getRandomFromList()

Simplye replace your class with this:

import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.lang.String;
import java.lang.StringBuilder;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Random;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    ArrayList<String> SList;
    TextView Sentence;

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        TextView Sentence;



            Sentence = (TextView) findViewById(R.id.Sentence);
            Button button = findViewById(R.id.button);

            button.setOnClickListener((View v) -> {
                Sentence.setText(getRandomFromList(getSampleList()));


            });

        };

        private ArrayList<String> getSampleList(){
            ArrayList<String> list = new ArrayList();
            list.add("Apple");
            list.add("Banana");
            list.add("Ciku");
            list.add("Danny ate the other fruits.");
            return list;
        }

        private String getRandomFromList(ArrayList<String> list){
            Random rand = new Random();
            return list.get(rand.nextInt(list.size()));
        }


}

And it will work!

Muhammad Zahab
  • 1,049
  • 10
  • 21