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

Как правильно сохранять/восстанавливать данные из Bundle - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Передать параметр из одной в другую http://www.cyberforum.ru/android-dev/thread1774744.html
Добрый вечер. Тут небольшая проблема. Как передать (ID) - С одной AppCompatActivity в Fragment. Ну принцип такой же как на Intent Intent i = new Intent(getActivity(), ID.class); i.putExtra("id", id);
Программирование Android Сервер для приложения на Android чи для приложения на андроид нужен сервер http://www.cyberforum.ru/android-dev/thread1774735.html
Как правильно использовать LeakCanary? Программирование Android
как правильно использовать LeakCanary, чтобы можно было определять утечки во всем приложении, а не только утечки активити?
Как создать spinner внутри recycler view? Программирование Android
необходимо реализовать выпадающий список внутри recycler view. может, кто сталкивался с подобным или есть идеи, как это можно сделать, буду благодарен за помощь)
Программирование Android Android cordova response http://www.cyberforum.ru/android-dev/thread1774638.html
Всем привет! Кто сталкивался с подобным, подскажите плиз как решить! Есть приложение на html5/angular. Через Сordova требуется получить разные файлы для разных мобильных ОС(Android, iOS). Получаем, все гуд. Устанавливаем на iOS - логинимся в приложении и проходим далее. Устанавливаем на Android - логинимся в приложении и получаем в респонсе status 0. Соответственно никуда дальше приложение не...
Программирование Android Как задать заголовок диалога через элемент strings.xml? Я перевожу свою программу на английский язык, но возникла одна проблема: названия диалогов остались непереведенными, т.к. их текст задается в .java классе, а не в strings.xml А как их привязать в элементу из strings.xml? Можно сделать и иначе, но так удобнее и легче всего... Подскажите, пожалуйста! подробнее

Показать сообщение отдельно
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 154
Записей в блоге: 1
02.07.2016, 23:05  [ТС]     Как правильно сохранять/восстанавливать данные из Bundle
Добавил логгирование во все методы, участвующие в жизненном цикле. Да, onSaveInstanceState не вызывается. Но зато вызывается onRestoreInstanceState! Странно, я думал они работают в паре и как-то вмешаны в основной жизненный цикл.

onPause->onCreate->onRestoreInstanceState->onResume

Значит место где можно сохранить данные - onPause. А в нём просто создаётся новый бандл и заполняется парами ключ-значение?

Bundle bundle=new Bundle();
bundle.putByteArray(...,...);

Добавлено через 4 часа 56 минут
Понял почему не вызывался onSaveInstanceState, добавил в класс public метод, а надо было protected. Теперь работает, но только 1 раз Т.е. получаю фото в ImageView, поворачиваю - фото сохраняется. Поворачиваю ещё раз - стирается. Никаких NullPointerException не вылетает.
Не могу понять почему при втором повороте картинка не восстанавливается из outState
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
public class AddEquipment extends AppCompatActivity {
 
    private static final int TAKE_PHOTO = 1;
    private static final String EQUIPMENT_IMAGE = "EQUIPMENT_IMAGE";
    private Button addPhoto;
    private ImageView equipmentImage;
    private Bitmap bp;
 
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        Log.d("happy","onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addequipment);
 
        addPhoto=(Button)findViewById(R.id.addPhoto);
        addPhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addPhoto();
            }
        });
 
        equipmentImage=(ImageView)findViewById(R.id.equipment_image);
 
    }
 
    private void addPhoto() {
        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(i, TAKE_PHOTO);
    }
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == TAKE_PHOTO) {
            if (resultCode == RESULT_OK) {
                if (data != null && data.getData() != null) {
                    Log.d("happy","Photo is getted");
                    bp = (Bitmap) data.getExtras().get("data");
                    equipmentImage.setImageBitmap(bp);
                }
            }
        }
    }
 
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d("happy","ONSAVEINSTANTSTATE");
        outState.putParcelable(EQUIPMENT_IMAGE,bp);
    }
 
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d("happy","ONRESTOREINSTANTSTATE");
        equipmentImage.setImageBitmap((Bitmap)savedInstanceState.getParcelable(EQUIPMENT_IMAGE));
    }
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru