Почему Getter возращает 0

214
14 ноября 2021, 06:00

Есть два класса MainActivity и results

1.первый класс MainActivity:

int full;
TextView text_c;
TextView textQ;
TextView textS;
Button button1;
Button button2;
Button button3;
int rA;
int i = 0;
int[][] Colors = {
        {255, 255, 255,0, 0, 255,254, 243, 0,250,0,12},
        {255, 0, 0,255, 255, 0,0,156,145,204,0,115},
        };
private int score = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //называем кнопки
    text_c = findViewById(R.id.text_v);
    textQ = findViewById(R.id.textQuestion);
    textS = findViewById(R.id.score);
    button1 = findViewById(R.id.btn1);
    button2 = findViewById(R.id.btn2);
    button3 = findViewById(R.id.btn3);
    //количество вопросов
    full = Colors.length;
    F1(Colors[i][0],Colors[i][1],Colors[i][2],Colors[i][3],Colors[i][4],Colors[i][5],Colors[i][6],Colors[i][7],Colors[i][8],Colors[i][9],Colors[i][10],Colors[i][11]);
    button3.setOnClickListener(this);
    button2.setOnClickListener(this);
    button1.setOnClickListener(this);
}
//очистка текста кнопок
public void clearText() {
    button1.setText("");
    button2.setText("");
    button3.setText("");
}
//установка цвета кнопок
public void setColor(Button t, int red, int green, int blue) {
    t.setBackgroundColor(Color.argb(255, red, green, blue));
}
public void F1(int mred, int mgreen, int mblue, int pred, int pgreen, int pblue, int n1red, int n1green, int n1blue, int n2red, int n2green, int n2blue) {
    textQ.setText("Какой цвет наиболее сочетаются с этим?");
    textS.setText("ваши очки:"+score);
    text_c.setBackgroundColor(Color.argb(255, mred, mgreen, mblue));
    clearText();//очищаем текст кнопок
    setColor(button1, pred, pgreen, pblue);
    setColor(button2, n1red, n1green, n1blue);
    setColor(button3, n2red, n2green, n2blue);
    Random Rand = new Random();
    int b = Rand.nextInt(3);
    switch (b) {
        case 0:
            setColor(button1, pred, pgreen, pblue);
            setColor(button2, n1red, n1green, n1blue);
            setColor(button3, n2red, n2green, n2blue);
            rA = 1;
            break;
        case 1:
            setColor(button2, pred, pgreen, pblue);
            setColor(button3, n1red, n1green, n1blue);
            setColor(button1, n2red, n2green, n2blue);
            rA = 2;
            break;
        case 2:
            setColor(button3, pred, pgreen, pblue);
            setColor(button1, n1red, n1green, n1blue);
            setColor(button2, n2red, n2green, n2blue);
            rA = 3;
            break;
    }

}
@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.btn1:
            //проверяем совпадает ли нажатая кнопка с правильным ответом
            if (rA == 1) {
                Toast.makeText(getApplicationContext(), "Правильно!:)", Toast.LENGTH_LONG).show();
                score = score +10;
            } else {
                Toast.makeText(getApplicationContext(), "Не получилось(", Toast.LENGTH_LONG).show();
            }
            nextQ();
            break;
        case R.id.btn2:
            if (rA == 2) {
                Toast.makeText(getApplicationContext(), "Правильно!:)", Toast.LENGTH_LONG).show();
                score = score + 10;
            } else {
                Toast.makeText(getApplicationContext(), "Не получилось(", Toast.LENGTH_LONG).show();
            }
            nextQ();
            break;
        case R.id.btn3:
            if (rA == 3) {
                Toast.makeText(getApplicationContext(), "Правильно!:)", Toast.LENGTH_LONG).show();
                score = score + 10;
            } else {
                Toast.makeText(getApplicationContext(), "Не получилось(", Toast.LENGTH_LONG).show();
            }
            nextQ();
            break;

    }
}
public int getScore() {
    return score;
}
public void nextQ() {
    i = i + 1;
    if (i<full) {
        F1(Colors[i][0], Colors[i][1], Colors[i][2], Colors[i][3], Colors[i][4], Colors[i][5], Colors[i][6], Colors[i][7], Colors[i][8], Colors[i][9], Colors[i][10], Colors[i][11]);
      }else if (i==Colors.length){
        //вывести какую-нибудь заставочку с очками за викторину
        Intent i;
        i = new Intent(this, results.class);
        startActivity(i);
        }
}

2.второй класс result:

TextView result_m;
float procen1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.results_activity);
    result_m = findViewById(R.id.result);
    MainActivity tg = new MainActivity();
    int scoreI = tg.getScore();
    result_m.setText(""+scoreI);
}

В MainActivity устанавливается вопрос,в случае его правильного ответа, прибавляется переменной score 10. Затем в другом классе results я с помощью getter пытаюсь получить значение score из MainActivity. Выводит 0,вместо числа. Если в getter передаю просто переменную,над которой ничего не делаю, то все выводится нормально. В чем проблема? Сильно по поводу кода прошу не ругаться, с Java только недавно познакомился.

Answer 1

Проблема в том что

MainActivity tg = new MainActivity(); //создается новый объект, это уже не тот ваш MainActivity в котором вы что то делали..
int scoreI = tg.getScore();
result_m.setText(""+scoreI);

Создает новый экземпляр класса MainActivity, а так как он новый экземпляр, getScore() возвращает default значение int.

Почитайте как передаются данные между Activity, Fragment. Как вариант https://metanit.com/java/android/2.12.php

READ ALSO
Не запустить процедуру с параметрами, заданную в базе

Не запустить процедуру с параметрами, заданную в базе

не получается запустить процедуру бд из java приложения, когда задаю параметры не по номерам столбцов, а по имени столбца

259
Парсинг string в int

Парсинг string в int

Есть код, который читает строку и парсит в intКак заставить видеть переменную s как int?

175
при работе с RecyclerView возникает ошибка java.lang.RuntimeException: Unable to start activity ComponentInfo

при работе с RecyclerView возникает ошибка java.lang.RuntimeException: Unable to start activity ComponentInfo

Пишу что-то вроде текстового редактора, текст в котором добавляется в элементе:

229
Как нарисовать векторное изображение canvas

Как нарисовать векторное изображение canvas

Как используя canvas нарисовать VectorDrawableОбычный Drawable у меня получается нарисовать конвертацией в Bitmap, но как нарисовать VectorDrawable, возможно ли это?

115