2013-11-26 3 views
2

Target - Android 4.1.2Как сохранить и передать пользовательский объект класса в другое действие

Мне нужно сохранить экземпляр объекта пользовательского класса и перенести его на другие виды деятельности. Я создал простой класс ObjectTransfer:

public class ObjectTransfer { 
private static Object TransfObj; 

public static void setTransferObj(Object trObj){ 
    TransfObj = trObj; 
} 

public static Object getTraObject(){ 
    Object retObj =TransfObj; 
    TransfObj = null; 
    return retObj; 
} 

в активности источника:

ObjectTransfer.setTransferObj(MyCustom); 

в Dest. деятельность:

MyCustom = (MyCustom) ObjectTransfer.getTraObject(); 

Это работа для меня, но иногда MyCustom становится null в ObjectTransfer.

Пожалуйста, помогите мне решить мою проблему!

Извините за мой английский.

+0

Вы должны использовать интерфейс 'Parcelable' или' Serializable'. – Sajmon

ответ

0

Я нашел решение. Я объявила

MyCustom as public static MyCustomClass MyCutom; 

в первом классе деятельности. В другой деятельности, я даю доступ с помощью:

firstActivity.MyCustom.somFunction(); 

Я не знал, что это правильно или нет, но это работает для меня. Спасибо Бабибу за идею о магазине в БД. Это тоже работает для меня (возможно, более правильно), но у меня не так много времени, чтобы написать этот код.

0

Сделайте ObjectTransfer реализовать Serializable:

public class ObjectTransfer implements Serializable{ 

Pass объект в первой Активность:

Intent in=new Intent(FirstActivity.this,SecondActivity.class); 
in.putExtra("obj", obj); 
startActivity(in); 

Получить объект во второй Активность:

ObjectTransfer ap = (ObjectTransfer) getIntent().getSerializableExtra("obj"); 
+0

in.putExtra ("obj", obj); Obj - это переменная ObjectTransfer? – GIKO

+0

Экземпляр класса ObjectTransfer. – Subbu

+0

Я не понимаю. В моем первом действии мне нужно написать public ObjectTransfer obj = new ObjectTransfer(); а затем работать с ним? – GIKO

1

При перемещении между различными видами деятельности, Android может убейте приложение перед началом нового действия. В этом случае вы потеряете данные. Как бы то ни было, это редкий случай, и это происходит чаще, когда вы возвращаетесь с домашнего экрана.

Лучшая практика заключается в использовании intents для доставки данных. Чтобы закодировать весь объект, вам необходимо использовать Intent.putExtra(), а ваш объект должен быть Parcelable.

EDIT: Просто подумал о другой причине, чтобы это произошло. Ваш код не синхронизирован, у вас может быть ошибка синхронизации потоков. Попробуйте добавить synchronization block.

+0

Посылка не работает. Потому что мне нужно хранить очень сложную структуру в моем пользовательском объекте класса – GIKO

+0

@GIKO Я не думаю, что у вас есть другие варианты. Вы также можете использовать Serializable и хранить его в БД, но он будет таким же. Если ваш static равен null, это происходит только потому, что ваше приложение разбилось. –

0

Попросите свой пользовательский объект реализовать интерфейс Parcelable, а затем добавьте объект в качестве дополнения к намерению, используемому для начала вашего другого действия. Другая деятельность может затем правильно очистить пользовательский объект от намерения. Это имеет дополнительное преимущество: если ваши действия когда-либо выполняются в отдельных процессах (т. Е. В разных пакетах), они все равно будут работать, поскольку Parcelable objects - это способ Android эффективно перемещать данные по всем процессам.

Смежные вопросы