Код не выполняет свою задачу

Button b = findViewById(R.id.button160);
TextView textView = findViewById(R.id.widget);
if(b.getText().toString()=="ОЧИСТИТЬ ЭКРАН") {
    SharedPreferences settings = getSharedPreferences("verbs", Context.MODE_PRIVATE);
    @SuppressLint("CommitPrefEdits") SharedPreferences.Editor editor = settings.edit();
editor.putString("get_text", (String) textView.getText().toString());
    ComponentName componentName = new ComponentName(BuildConfig.APPLICATION_ID, Brown.class.getName());
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(MainActivity.this);
    int ids[] = appWidgetManager.getAppWidgetIds(componentName);
    for (int appWidgetId : ids) {
        RemoteViews view = new RemoteViews(MainActivity.this.getPackageName(), R.layout.brown);
        view.setTextViewText(R.id.widget, "");
        appWidgetManager.updateAppWidget(appWidgetId, view);
    }
    this.stopService(new Intent(this, To_server.class));
    b.setText("ВЕРНУТЬ ЭЛЕМЕНТЫ НА ЭКРАН");
} else if (b.getText().toString()=="ВЕРНУТЬ ЭЛЕМЕНТЫ НА ЭКРАН") {
    ComponentName componentName = new ComponentName(BuildConfig.APPLICATION_ID, Brown.class.getName());
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(MainActivity.this);
    int ids[] = appWidgetManager.getAppWidgetIds(componentName);
    for (int appWidgetId : ids) {
        RemoteViews view = new RemoteViews(MainActivity.this.getPackageName(), R.layout.brown);
        view.setTextViewText(R.id.widget, this.getSharedPreferences("verbs", Context.MODE_PRIVATE).getString("get_text", ""));
        appWidgetManager.updateAppWidget(appWidgetId, view);
    }
    this.startService(new Intent(this, To_server.class));
    b.setText("ОЧИСТИТЬ ЭКРАН");
}

Я хотел чтобы этот код смотрел текст в кнопкe b и если он равен определенному значению, убрать текст из виджета и остановить сервис To_server. А если кнопка b равна другому значению, то вернуть текст из SharedPreferences в виджет и запустить To_server. Но этого не происходит.


Ответы (1 шт):

Автор решения: Yakov

В Java строки это объекты, когда ты пишешь условие равенства оно нормально работает только для примитивных типов ( int a=1; int b=1; boolean c = a==b; но если заменить int на Integer, то результат будет уже другим, если значение, которое ему присвоили, будет больше 127. ), у объектов сравниваются указатели. Они могут совпасть(в некоторых случаях), но это скорее исключение чем правило. для сравнения значений объектов есть метод equals() чтобы сравнить строку нужно писать не b.getText().toString()=="ОЧИСТИТЬ ЭКРАН", а "ОЧИСТИТЬ ЭКРАН".equals(b.getText().toString()). исправь все сравнения с == на .equals() и твой код хотя бы начнет попадать в ветки внутри условий. Научись использовать отладчик и это сильно упростит понимание, что в коде работает не так.

→ Ссылка