Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
#1

Глобальная переменная в Java - Android

06.04.2016, 21:44. Просмотров 855. Ответов 30
Метки нет (Все метки)

Подскажите нубу. Недавно начал изучать Java. У меня в методе onClick есть свич для обработки кнопок. Вот отрывок для одной кнопки:
Java
1
2
3
4
5
6
7
8
9
10
public void onClick(View v) {
        int res = 0;
        String vd = "";
        switch (v.getId()){
            case R.id.btn1:
                int zn = 1;
                res = res + zn;
                vd = vd + "1";
                viewText.setText(vd);
                break;
Как мне сделать, чтобы после выполнения свича, в строку String vd = ""; сохранялся полученный результат и при повторном выполнение свича использовался этот String vd = ""? Или что я не так понимаю?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
olegva11
9 / 9 / 1
Регистрация: 29.11.2013
Сообщений: 74
06.04.2016, 22:23     Глобальная переменная в Java #2
В Java нет глобальных переменных, по факту глобальная переменная, это переменная, которая будет в главном классе иерархии. Вам просто нужно
Java
1
String vd = "";
Вынести за пределы обработчика и объявить сразу под объявлением класса. Тогда получится переменная, которая имеет область на весь класс.
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 22:38  [ТС]     Глобальная переменная в Java #3
А можно пример? Нужно чтобы String vd = ""; менялась при каждом выполнении обработчика.

Добавлено через 2 минуты
Может нужно работать с this или super?
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 22:38     Глобальная переменная в Java #4
Может вам так надо:
Java
1
2
3
4
5
6
            case R.id.btn1:
                int zn = 1;
                res = res + zn;
                vd = viewText.getText()+ "1";
                viewText.setText(vd);
                break;
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 22:41  [ТС]     Глобальная переменная в Java #5
Точно, то что нужно, спасибо большое!
olegva11
9 / 9 / 1
Регистрация: 29.11.2013
Сообщений: 74
06.04.2016, 22:46     Глобальная переменная в Java #6
Паша Ласточкин, Просто вместо того что бы запоминать, вы постоянно инициализируете переменную при каждом выполнении события и обнуляете её. Также у меня вопрос, вы хотите получить количество вызовов событий и записать их в viewText? Тогда зачем строковая переменная, можно сделать обычной целочисленной.
Что бы наглядно указать, нужно что бы вы кинули весь код.
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 22:47     Глобальная переменная в Java #7
А может еще так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int id=v.getId();
int ids[]={
    R.id.btn0,R.id.btn1,R.id.btn2,R.id.btn3
    R.id.btn4,R.id.btn5,R.id.btn6,R.id.btn7
    R.id.btn8,R.id.btn9
};
int cur_num=-1;
for (int i=0;i<ids.length;i++){
    if (ids[i]==id) {
    cur_num=i;
    break;
    }
}
if (cur_num>=0){
    String vd=viewText.getText()+ cur_num;
    viewText.setText(vd);
}
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 22:58  [ТС]     Глобальная переменная в Java #8
Я хочу сделать калькулятор. Мне нужно чтобы при нажатии например кнопки 1 - 2 раза отображалось 11 в тексвью, а не 1(уже объяснили). А в res нужно чтобы заносилась полученная информация и при повторном выполнении онклик я мог работать с предыдущим res, а не int res = 0;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.pasha.calc;
 
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, c, op1, op2, op3, rav;
 
    TextView textView;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
        btn5 = (Button) findViewById(R.id.btn5);
        btn6 = (Button) findViewById(R.id.btn6);
        btn7 = (Button) findViewById(R.id.btn7);
        btn8 = (Button) findViewById(R.id.btn8);
        btn9 = (Button) findViewById(R.id.btn9);
        c = (Button) findViewById(R.id.c);
        op1 = (Button) findViewById(R.id.op1);
        op2 = (Button) findViewById(R.id.op2);
        rav = (Button) findViewById(R.id.rav);
        textView = (TextView) findViewById(R.id.textView);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
        btn8.setOnClickListener(this);
        btn9.setOnClickListener(this);
 
 
 
 
 
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
    @Override
    public void onClick(View v) {
        int res = 0;
        String vd = "";
        switch (v.getId()){
            case R.id.btn1:
                int zn = 1;
                res = res + zn;
                int vres = res;
                vd = vd + "1";
                editText.setText(vd);
                break;
            case R.id.btn2:
                zn = 2;
                res = res + zn;
                vd = editText.getText()+ "2";
                editText.setText(vd);
                break;
           
        }
    }
}
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 23:04     Глобальная переменная в Java #9
Вы исправили только "case R.id.btn2", в "case R.id.btn1" остается ошибка. Второй мой код смотрели?
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 23:07  [ТС]     Глобальная переменная в Java #10
Мне пока хватит одного кейса для проверки, потом я к остальным добавлю. Второй код я не совсем понял, что он выполняет?
olegva11
9 / 9 / 1
Регистрация: 29.11.2013
Сообщений: 74
06.04.2016, 23:11     Глобальная переменная в Java #11
Паша Ласточкин, Если правильно понял, просто вынес переменную вне вашего обработчика, может что-то не так понял.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package com.example.pasha.calc;
 
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, c, op1, op2, op3, rav;
 
    TextView textView;
     int res = 0; //Ваша переменная, первоначально будет 0
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);
        btn5 = (Button) findViewById(R.id.btn5);
        btn6 = (Button) findViewById(R.id.btn6);
        btn7 = (Button) findViewById(R.id.btn7);
        btn8 = (Button) findViewById(R.id.btn8);
        btn9 = (Button) findViewById(R.id.btn9);
        c = (Button) findViewById(R.id.c);
        op1 = (Button) findViewById(R.id.op1);
        op2 = (Button) findViewById(R.id.op2);
        rav = (Button) findViewById(R.id.rav);
        textView = (TextView) findViewById(R.id.textView);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
        btn8.setOnClickListener(this);
        btn9.setOnClickListener(this);
 
 
 
 
 
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
 
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
 
 
    @Override
    public void onClick(View v) {
     //   int res = 0; При каждом вызове обнуляется, вариант либо записывать в какой-то компонент(на формочке, либо вынести объявление переменной выше)
        String vd = "";
        switch (v.getId()){
            case R.id.btn1:
                int zn = 1;
                res = res + zn;
                int vres = res;
                vd = vd + "1";
                editText.setText(vd);
                break;
            case R.id.btn2:
                zn = 2;
                res = res + zn;
                vd = editText.getText()+ "2";
                editText.setText(vd);
                break;
           
        }
    }
}
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 23:17  [ТС]     Глобальная переменная в Java #12
Видимо я не так объяснял или не сразу понял. Теперь разобрался. Получается, что метод изначально работает с переменными общего класса, а потом, когда появляются локальные, с локальными?
olegva11
9 / 9 / 1
Регистрация: 29.11.2013
Сообщений: 74
06.04.2016, 23:20     Глобальная переменная в Java #13
Паша Ласточкин, Метод имеет доступ к переменным общего класса, а так же имеет доступ к своим локальным переменным, но везде рекомендуют использовать переменные именно локальные, потому что не будет возникать проблема с добавлением(расширяемость класса) методов в класс и тд, но это в больших проектах.
Так же нужно создавать универсальный код, если он делает тоже самое, то нужно стремится к тому, что бы этим занимался именно один метод. Как вам советует nikolay1982.
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 23:20     Глобальная переменная в Java #14
Подбирает индекс кнопки по id источника события. Индекс 0 соответствует кнопки 0, и т.д.
Далее берется строка из viewText(вы поменяли его на editText) и к этой строке дописывается в конец строковое представление индекс кнопки(button).
Потом обновляется viewText полученным строковым значения(на экране).

Можно и case-ми.
Но вы сами только что допустили ошибку. А мой код более выразителен. И не надо 10 раз Copy->Past.
если хотите case-ми тогда:
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 23:30  [ТС]     Глобальная переменная в Java #15
nikolay1982, Ваш способ действительно лучше по объему кода, просто мне понятнее кейсы, в циклах я пока не очень разбираюсь.
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 23:30     Глобальная переменная в Java #16
case-ми, но более лучшее структурирование кода:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public void onClick(View v)
{
    int id = v.getId();
        int cur_num=-1;
    switch (id)
    {
    case R.id.btn0:
        cur_num = 0;
        break;
 
    case R.id.btn1:
        cur_num = 1;
        break;
 
    case R.id.btn2:
        cur_num = 2;
        break;
 
    case R.id.btn3:
        cur_num = 3;
        break;
 
    case R.id.btn4:
        cur_num = 4;
        break;
 
    case R.id.btn5:
        cur_num = 5;
        break;
 
    case R.id.btn6:
        cur_num = 6;
        break;
 
    case R.id.btn7:
        cur_num = 7;
        break;
 
    case R.id.btn8:
        cur_num = 8;
        break;
 
    case R.id.btn9:
        cur_num = 9;
        break;
    }
    if (cur_num >= 0) {
        String vd = editText.getText()+ cur_num;
        editText.setText(vd);
    }
}
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 23:36  [ТС]     Глобальная переменная в Java #17
И еще такой вопрос, для res этот цикл тоже будет работать? В res я хочу записывать результат вычислений на калькуляторе, а vd был для вывода в текствью.
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
06.04.2016, 23:46     Глобальная переменная в Java #18
Тогда res надо сделать частью класса. Но не подобает такие простые имена членам класса. Можно дать имя result,tmpResult и т.д. Но я не совсем понял для чего это нужно, ведь мы все равно храним строку в textView. Мы можем просто преобразовать строку в число, когда пользователь выберет операцию.
Паша Ласточкин
0 / 0 / 0
Регистрация: 05.04.2016
Сообщений: 21
06.04.2016, 23:49  [ТС]     Глобальная переменная в Java #19
А разве можно строку преобразовывать в число? Я где-то это тоже слышал, но так и не понял как это делается. Знаю что в php можно через eval это сделать, а как в java?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2016, 00:12     Глобальная переменная в Java
Еще ссылки по теме:

Переменная типа Uri Android
Глобальная переменная, которую можно использовать в других Activity Android
Переменная не получает отрицательное значение Android
Android Обмен данными между Activity (одна глобальная переменная)
BroadcastReceiver + static переменная Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
nikolay1982
92 / 92 / 38
Регистрация: 22.01.2014
Сообщений: 310
07.04.2016, 00:12     Глобальная переменная в Java #20
Можно:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public static void main(String argv[])
    {
        int val = 0;
        String s = "1234";
 
        try{
            Integer i_obj = Integer.valueOf(s);
            val=i_obj.intValue();
            System.out.println("val="+val);
            //все получилось
        }
        catch (Exception err) {
            //Сюда мы попали, потому что не получилось
            //получить целое по строке, значит в строке что-то не то
            err.printStackTrace();
        }
    }
Добавлено через 2 минуты
Можно даже в двоичной системе строку перевести в целое(десятичное).
Java
1
Integer i_obj = Integer.valueOf(s,2);//2 - это radix, система счисления
Yandex
Объявления
07.04.2016, 00:12     Глобальная переменная в Java
Ответ Создать тему
Опции темы

Текущее время: 10:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru