Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
1

Странный многократный запуск активити

17.04.2017, 17:55. Просмотров 412. Ответов 10
Метки нет (Все метки)

Пишу одно приложение, в котором сохраняю введенное в edittext имя. Если приложение запускают не впервые, то я устанавливаю один layout и перехожу в другое activity. Иначе же прошу ввести имя. Вроде все заработало, но вот что приключилось: когда имя сохранено в sharedPreferences(не первый запуск), то сначала показывается текущий layout, далее через секунды 2-3 он заново загружается. Возможно, я неправильно использовал Timer до перехода в этот activity, но он отрабатывает как надо, так что думаю проблема в использовании SharedPreferences.
Вот код "проблемного" activity :
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
import java.util.Timer;
import java.util.TimerTask;
 
 
public class NameActivity extends AppCompatActivity {
    EditText name;
    Button btn, btn1, btn2;
    TextView welcome, welcome1;
    String name1;
    String savedText;
    final String SAVED_TEXT = "saved_text";
    SharedPreferences sPref;
    Timer t;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sPref = getSharedPreferences("Name", 0);
        savedText = sPref.getString(SAVED_TEXT, "");
 
        if (!savedText.equals("")) {
            setContentView(R.layout.activity_start);
            btn1 = (Button) findViewById(R.id.start1);
            btn2 = (Button) findViewById(R.id.remove);
            welcome1 = (TextView) findViewById(R.id.welcome1);
            welcome1.setText("Добро пожаловать, " + savedText);
            btn1.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(NameActivity.this, MenuLM.class);
                    startActivity(intent);
                    finish();
                }
            });
            btn2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    removeText();
                    welcome1.setText("Успешно удален");
                    btn1.setEnabled(false);
                    timer(NameActivity.class);
                }
            });
        } else {
            setContentView(R.layout.activity_name);
            welcome = (TextView) findViewById(R.id.welcome);
            btn = (Button) findViewById(R.id.start);
            name = (EditText) findViewById(R.id.name);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(btn.getWindowToken(),
                            InputMethodManager.HIDE_NOT_ALWAYS);
                    name1 = name.getText().toString();
                    if (name1.equals("")) {
                        welcome.setText("Введите имя!");
                        return;
                    }
                    if (name1.substring(0, 1).contains(" ")) {
                        welcome.setText("Первый символ не должен быть пробелом!");
                        return;
                    }
                    saveText();
                    welcome.setText("Добро пожаловать, " + name1);
                    timer(MenuLM.class);
                }
            });
        }
    }
 
    public void timer(final Class cl) {
        t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        t.cancel();
                        t = null;
                        Intent intent = new Intent(NameActivity.this, cl);
                        startActivity(intent);
                        finish();
                    }
                });
            }
        }, 3500);
    }
 
    public void saveText() {
        SharedPreferences.Editor ed = sPref.edit();
        ed.putString(SAVED_TEXT, name1);
        ed.commit();
    }
 
    public void removeText() {
        SharedPreferences.Editor ed = sPref.edit();
        ed.remove(SAVED_TEXT);
        ed.commit();
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        saveText();
    }
 
    @Override
    public void onBackPressed() {
        return;
    }
 
}
А вот activity, которое я использовал до перехода на текущий:
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
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
 
import java.util.Timer;
import java.util.TimerTask;
 
public class TitleLaernMath extends AppCompatActivity {
    Bitmap a;
    ImageView i;
    Timer t = new Timer();
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_title_laern_math);
 
        a = BitmapFactory.decodeResource(getResources(), R.drawable.title);
        i = (ImageView) findViewById(R.id.imageView);
        i.setImageBitmap(a);
 
        ScaleAnimation animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f);
        animation.setDuration(2000);
        i.startAnimation(animation);
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        t.cancel();
                        Intent intent = new Intent(TitleLaernMath.this, NameActivity.class);
                        startActivity(intent);
                        finish();
                    }
                });
            }
        }, 3500);
 
 
    }
 
    @Override
    public void onBackPressed() {
        return;
    }
}
Добавлено через 16 часов 13 минут
up!1!1

Добавлено через 8 часов 13 минут
up!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2017, 17:55
Ответы с готовыми решениями:

Запуск активити
Создаю приложение-справку, при запуске выходит активити (MainActivity), которое содержит 2 кнопки...

Запуск BroadcastReceiver без активити
Имеется приложение, включающее в себя единственный класс: public class MyReceiver extends...

Не работает If и запуск нового активити
Есть загрузка данных с базы MySql в переменные, есть 2 EditText в которые вводятся текстовые...

Запуск анимации при старте активити
Есть покадровая анимация, которая выставлена фоном одного из элементов интерфейса. прописана как...

Запуск таймера после закрытия второй Активити
Есть две Активити, на первой есть Chronometer. При запуске активити1 запускается таймер, при...

10
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,118
17.04.2017, 17:58 2
31anton, вам не приходило в голову что вашу тему даже не переименовывают потому что непонятно что вам нужно, а разбирать весь код ни у кого времени нет? Для начала локализуйте ошибку.
0
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
17.04.2017, 21:54  [ТС] 3
Дело в том, что одно и тоже activity загружается 2 раза, в том случае, когда в SharedPreferences есть сохранения строка. Хотя программно я не задаю неоднократную загрузку , хочу лишь, чтобы при сохраненном имени выводилось один layout, иначе другой.
0
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,118
18.04.2017, 08:52 4
31anton, может таймер таск отрабатывает?
0
18.04.2017, 08:52
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
18.04.2017, 09:09  [ТС] 5
vxg, он то как раз отрабатывает как нужно. Тем более я использовал TimerTask в приложении до этих двух активити, все было без ошибок и по плану. В аргументах метода timer я указал только одно значение, значит, он и должен отработать 1 раз.
0
vxg
Модератор
3292 / 2086 / 330
Регистрация: 13.01.2012
Сообщений: 8,118
18.04.2017, 09:23 6
31anton, если вы убираете манипуляции с выбором разметки, а используете всегда одну разметку аномалии имеют место?
0
ExFau$t
830 / 671 / 184
Регистрация: 08.05.2012
Сообщений: 3,251
18.04.2017, 09:31 7
Почти наверняка дело в таймере, надо вешать логи и смотреть.
п.с. смотреть код очень тяжко, он печальный.
0
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
18.04.2017, 09:43  [ТС] 8
vxg, я могу попробовать установить один layout и добавлять элементы программного. Вот эта аномалия не происходит в том случае, когда пользователь не ввел имя и ему нужно его ввести в edittext. А вот когда оно введено и происходит повторный запуск приложения и выбор на другой layout, тогда аномалия и всплывает.
0
Pablito
2845 / 2263 / 762
Регистрация: 12.05.2014
Сообщений: 7,930
Завершенные тесты: 1
18.04.2017, 11:15 9
код из первого сообщения - отстой полный, его нужно весь вытереть и переписать нормально
0
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
18.04.2017, 11:28  [ТС] 10
Паблито, я его переписывал не однократно, чтобы исправить как то ошибку. Разумеется, я его перепишу. Извините, за то что такое видите
1
31anton
1 / 1 / 0
Регистрация: 22.01.2016
Сообщений: 9
22.04.2017, 12:19  [ТС] 11
vxg, аномалии опять появляются. Даже при отсутствии выбора разметки. Попытался вынести в отдельный класс методы с сохранением и удалением текста и поле с sharedpreferences. Но ничего не выходит
0
22.04.2017, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2017, 12:19

Запуск стартовой активити при выгрузке приложения из памяти
Заметил в некоторых приложениях, что после их сворачивания и разворачивания через некоторое время -...

На телефоне highscreen 3 на всех активити происходит быстрый самовозврат к главной активити
Сделал меню в виде ListView. При клике на меню запускаются активити. На эмуляторе работает, на...

Как вызвать метод в активити классе из обычного не активити класса?
Есть активити в котором вводятся логин и пароль. При нажатии кнопки "войти" в отдельном классе...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru