Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
#1

Приложение падает после вызова finish - Программирование Android

27.11.2016, 17:07. Просмотров 275. Ответов 18
Метки нет (Все метки)

Подскажите плз как. Такого я чес слово не ожидал, честно искал в сети не нашел. Даже не думал что будут проблемы.
Java
1
2
3
4
5
switch (item.getItemId()) {
        case R.id.mnExit:
        //f = frManager.findFragmentById(R.id.frLayMain);
        finish();
        break;
И приложение падает. Подозреваю что из за того , что используются фрагменты. И их надо как то особым образом закрывать перед закрытием приложения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2016, 17:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приложение падает после вызова finish (Программирование Android):

Падает приложение сразу после on Create - Программирование Android
import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration;...

Падает приложение - Программирование Android
final Button changeB = (Button)findViewById(R.id.but_change); changeB.setOnClickListener(new...

Приложение с ListView падает с NullPointerException - Программирование Android
Нужно было создать список с помощью ListView (На одной странице вводится домашняя работа, на другой выводится). Создал 2 подобные...

Приложение падает на старых версиях OS - Программирование Android
Ещё раз привет. Ещё один крик души. * Не беспокойтесь, я не буду сливать каждую свою проблему сюда, это просто проблема №2 на эту...

Падает приложение для публикации вконтакте - Программирование Android
public class VkWebViewClient extends WebViewClient { private static final String TAG = "Vkfunc"; public String access; ...

OpenGL наложение текстуры, падает приложение - Программирование Android
после того как выполняю gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, uvCoordsBuffer);, метод drawElements крешит приложение с логами, вобще...

18
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
27.11.2016, 17:13 #2
лог ошибки где?
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
27.11.2016, 17:17  [ТС] #3
11-27 19:16:12.127: E/AndroidRuntime(19929): FATAL EXCEPTION: main
11-27 19:16:12.127: E/AndroidRuntime(19929): java.lang.IllegalStateException: commit already called
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.app.BackStackRecord.commitInternal(BackStackRecord.java:594)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.app.BackStackRecord.commit(BackStackRecord.java:586)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.example.storageboss.MainActivity.onOptionsItemSelected(MainActivity.java:105)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.app.Activity.onMenuItemSelected(Activity.java:2567)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1018)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:166)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.widget.AbsListView.performItemClick(AbsListView.java:1142)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2859)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.widget.AbsListView$1.run(AbsListView.java:3625)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.os.Handler.handleCallback(Handler.java:800)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.os.Handler.dispatchMessage(Handler.java:100)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.os.Looper.loop(Looper.java:194)
11-27 19:16:12.127: E/AndroidRuntime(19929): at android.app.ActivityThread.main(ActivityThread.java:5434)
11-27 19:16:12.127: E/AndroidRuntime(19929): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 19:16:12.127: E/AndroidRuntime(19929): at java.lang.reflect.Method.invoke(Method.java:525)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:834)
11-27 19:16:12.127: E/AndroidRuntime(19929): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
11-27 19:16:12.127: E/AndroidRuntime(19929): at dalvik.system.NativeStart.main(Native Method)
11-27 19:16:46.516: E/linker(20481): load_library(linker.cpp:759): library "libmaliinstr.so" not found
11-27 19:16:46.521: E/(20481): appName=com.example.storageboss, acAppName=com.android.cts.openglperf
11-27 19:16:46.521: E/(20481): 0
11-27 19:16:46.521: E/(20481): appName=com.example.storageboss, acAppName=com.android.browser
11-27 19:16:46.521: E/(20481): 0

Добавлено через 1 минуту
так тоже не работает.
Java
1
2
3
f = frManager.findFragmentById(R.id.frLayMain);
            frManager.beginTransaction().remove(f).commit();
            finish();
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
27.11.2016, 19:29 #4
Alex_Fedor, по ошибке - вы нам не все приказываете и ошибка не в финише - двойной комит если я верно читаю на бусурманском
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
27.11.2016, 20:09  [ТС] #5
Цитата Сообщение от vxg Посмотреть сообщение
ошибка не в финише - двойной комит
так вначале вообще комитов не было. Чистый finish();
А вообще какой алгоритм закрытия приложения должен быть. Закрытие всех фрагментов, затем закрытие приложения. Или по другому. Нигде не нашел описания.
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
27.11.2016, 20:32 #6
нет никакого алгоритма
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
27.11.2016, 20:43  [ТС] #7
Цитата Сообщение от Паблито Посмотреть сообщение
нет никакого алгоритма
Я правильно понимаю. Просто в нужном месте пишешь finish(); и все? у всех работает , у меня ошибка
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
27.11.2016, 20:44 #8
Alex_Fedor, ПО ЛОГУ ОШИБКА ИЗ-ЗА ДРУГОГО
0
Pablito
2525 / 2004 / 624
Регистрация: 12.05.2014
Сообщений: 7,030
Завершенные тесты: 1
27.11.2016, 20:46 #9
я тоже думаю что код показан не весь или на момент вызова finish() код был другой
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
28.11.2016, 08:22  [ТС] #10
Вот весь код, именно в таком варианте приложение падает. В меню на один R.id.frLayMain вызываются разные фрагменты. Это работает без проблем. Проблема именно если я пытаюсь закрыть приложение.
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
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.
        
        switch (item.getItemId()) {
        case R.id.mnExit:
            //f = frManager.findFragmentById(R.id.frLayMain);
            //frManager.beginTransaction().remove(f).commit();
            finish();
            break;
        case R.id.mnStorageIn:// add equip to strorage
            Toast.makeText(this, "add equip to strorage", Toast.LENGTH_SHORT).show();
            frTransaction=frManager.beginTransaction();
            frTransaction.replace(R.id.frLayMain, frStorageIn,"frStorageIn");
            break;
        case R.id.mnStorageOut:// give equip in storage
            Toast.makeText(this, "give equip in storage", Toast.LENGTH_SHORT).show();
            frTransaction=frManager.beginTransaction();
            frTransaction.replace(R.id.frLayMain, frStorageout,"frStorageOut");
            break;
        default:
            break;
        }
        frTransaction.commit();
        frManager.executePendingTransactions();
        //f=frManager.findFragmentById(R.id.frLayMain);//Name Current Fragment into Tag
        //Log.d(MY_LOG, "Name Fragment "+ f.getTag());
        return super.onOptionsItemSelected(item);
    }
Добавлено через 9 минут
Вообще не понимаю. Попытался изолировать проблемный код, приложение все равно падает.
Java
1
2
3
4
5
6
7
8
9
10
11
12
case R.id.mnExit:
            try {
                f = frManager.findFragmentById(R.id.frLayMain);
                frManager.beginTransaction().remove(f).commit();
                finish();
            } catch (Exception e) {
                // TODO: handle exception
                Log.d(MY_LOG, "Error finish = "+ e.getMessage());
            }
            
            //finish();
            break;
0
shavuz
111 / 117 / 23
Регистрация: 29.01.2014
Сообщений: 584
28.11.2016, 08:57 #11
Цитата Сообщение от Alex_Fedor Посмотреть сообщение
return super.onOptionsItemSelected(item);
попробуйте поставить в начале функции
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
28.11.2016, 09:27  [ТС] #12
Все вопрос снят всем спасибо. Оказывается с фрагментами в таком варианте надо так финишировать
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
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.
        switch (item.getItemId()) {
        case R.id.mnExit:
            finish();
            return super.onOptionsItemSelected(item);
        case R.id.mnStorageIn:// add equip to strorage
            Toast.makeText(this, "add equip to strorage", Toast.LENGTH_SHORT).show();
            frTransaction=frManager.beginTransaction();
            frTransaction.replace(R.id.frLayMain, frStorageIn,"frStorageIn");
            break;
        case R.id.mnStorageOut:// give equip in storage
            Toast.makeText(this, "give equip in storage", Toast.LENGTH_SHORT).show();
            frTransaction=frManager.beginTransaction();
            frTransaction.replace(R.id.frLayMain, frStorageout,"frStorageOut");
            break;
        default:
            break;
        }
        frTransaction.commit();
        frManager.executePendingTransactions();
        return super.onOptionsItemSelected(item);
    }
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
28.11.2016, 11:40 #13
Alex_Fedor, получается вы комитили непойми что хранящееся в frTransaction?
0
Alex_Fedor
32 / 32 / 5
Регистрация: 20.01.2015
Сообщений: 230
28.11.2016, 12:07  [ТС] #14
Цитата Сообщение от vxg Посмотреть сообщение
получается вы комитили непойми что
Думаю получается, что после finish(); должен идти оператор return super.onOptionsItemSelected(item); иначе падает
0
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,680
28.11.2016, 12:16 #15
Alex_Fedor, почему-то я продолжаю настаивать на том что во всех других ветках switch переменная frTransaction получает какое-то значение, а в ветке case R.id.mnExit она его не получает (в ней какой-то мусор) однако при этом мы совершали над frTransaction вызов commit что ведет к крашу ибо в frTransaction непоймичто
0
28.11.2016, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2016, 12:16
Привет! Вот еще темы с ответами:

Падает приложение при чтении настроек - Программирование Android
Вот фрагмент моего кода: public void butCalculationElectric_Click(View v){ float c_to100 = sp.getFloat("to100",...

Приложение падает когда шапка Navigation Drawer Activity пропадает из виду - Программирование Android
В моей программе используется Navigation Drawer Activity и в нем много пунктов меню. И поэтому как только шапка Navigation Drawer Activity...

Пустой список после вызова adapter.notifyDataSetChanged - Программирование Android
При создании все норм. Пропадает только после обновления Фрагмент Context context; View v; ListView listView; ...

Как изменится стек после вызова активити другого приложения - Программирование Android
Если у меня есть 2 задачи(2 Task) и я из первой задачи вызову активити, которое находится в стеке второй задачи, то у меня то активити...


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

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

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