Google Android - это несложно • Просмотр темы - Урок 69. Передаем Parcelable объекты с помощью Intent

Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 авг 2018, 06:08

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: 27 дек 2013, 10:47 
Аватар пользователя

Зарегистрирован: 09 янв 2012, 14:45
Сообщений: 2386
Откуда: Самара
Благодарил (а): 102 раз.
Поблагодарили: 321 раз.
Скрин вырви глаз какой-то. Не объявляйте метод onClick в XML файле, делайте это исключительно через код.

_________________
Изображение

А тот ли ты путь выбрал, разработчик?
Хочешь знать ошибки ответ? Загляни в logcat!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 дек 2013, 13:00 
Аватар пользователя

Зарегистрирован: 01 апр 2012, 16:09
Сообщений: 117
Откуда: Минск
Благодарил (а): 11 раз.
Поблагодарили: 5 раз.
Скрин реально доставляет))
а ошибка может быть из-за того, что, выражаяcь понятным языком, метод клика не найдет (или его вообще нет или сигнатура не совпала (должно быть:
Код: [ Загрузить ] [ Скрыть ]
  1. public void <название из xml>(View v) 
))
Поэтому, как сказали выше, лучше через xml этого не делать )


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 09 апр 2014, 14:54 

Зарегистрирован: 07 фев 2014, 19:02
Сообщений: 5
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Есть вопрос по поводу parcel.readMap какая карта нужна в параметрах, или вообще что нужно там указывать
public final void readMap (Map outVal, ClassLoader loader)

у меня:

private ParsResult(Parcel parcel)
{
resultMap = parcel.readMap(,getClass().getClassLoader());
}

P.S Мб есть другой способ передать карту вида Map<<Мой класс>, List<Мой класс>>; другому Activity?
P.P.S Вопрос решил, использованием интерфейса сериализации.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 69. Ошибка
СообщениеДобавлено: 21 июн 2014, 14:01 

Зарегистрирован: 13 ноя 2013, 22:12
Сообщений: 3
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Superoleg писал(а):
все вроде бы стартует, а при попытке нажать на кнопку выдает такую ошибку

У меня была такая же ошибка пока я SecondActivity не прописал в AndroidManifest файле.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 июн 2014, 22:33 

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Всем привет. У меня следующая ситуация. Есть объект с полями
private ArrayList<Map<String, Object>> groupData;
private ArrayList<ArrayList<Map<String, Object>>> childData;
private ArrayList<List<LatLng>> polylinePoints;
private ArrayList<Map<String, Double>> mapBounds;

пытался сделать его Parcelable, но что-то никак не разберусь что тут к чему. То ли writeTypedList() и readTypedList() надо использовать, то ли просто writeList() и readList()? И какие параметры нужно подставлять в каждом случае. У Map<String, Object> в качестве объектов встречаются строки, Integer-ы и ArrayList-ы, никаких собственных классов. Кто нибудь может просветить?

P.S. пытался вместо Parcelable использовать Serializable. Тут получается скомпилировать код, но при старте второй активити, в которую требуется передать объект, eclipse выдаёт java.lang.RuntimeException: Parcelable encountered IOException writing serializable object


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 21 июн 2014, 22:45 

Зарегистрирован: 17 апр 2014, 17:50
Сообщений: 30
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Похоже, что не сериализуется мой класс, потому что он содержит AsyncTask в качестве внутреннего класса. Но вопрос по Parcelable по-прежнему открыт.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 фев 2015, 17:32 

Зарегистрирован: 06 фев 2015, 17:03
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Parcellable быстрее, чем Serializable. Пруфлинк: http://habrahabr.ru/post/174015/
Если у тебя парочка простых параметров, то intent.putExtra() - самое оно. Но когда нужно передавать большие объемы данных между Activity или объекты между фрагментами - Parcellable будет самым оптимальным, имхо. Итак, разница:
    1. интерфейс Serializable - удобно, "java-styled", но медленно;
    2. интерфейс Parcellable - "android-specific", менее удобно, зато резво
.

Где применять:
    1. intent.putExtra() - при передаче нескольких параметров;
    2. Serializable - при передаче НЕбольших объектов/при передаче МАЛОГО количества объектов;
    3. Parcellable - при передаче больших объектов/при передаче БОЛЬШОГО количества объектов + <имхо> при "общении" фрагментов и основной активити</имхо>;


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 сен 2015, 01:25 
Аватар пользователя

Зарегистрирован: 09 сен 2015, 13:53
Сообщений: 19
Благодарил (а): 1 раз.
Поблагодарили: 5 раз.
Спасибо з урок. Обсуждение на форуме очень помогло в усвоении информации.
Очевидно, что львиная доля полезности в обсуждении идет от опытных "обитателей" за что им большое спасибо.

Пожелание к уроку/урокам: отдельно уделять время реальным примерам и практике использования тех технологий, которые разбираются в конкретном уроке.
Например - тема интерфейс Parcelable - сразу же объяснить зачем и когда он используется. Какие есть аналоги и когда они используются (например отличие от Serializable, или почему данные нельзя просто передавать как putExtra или в Preferences или в БД или в файлик или как значения статических полей и т.д.)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 сен 2015, 11:50 
Аватар пользователя

Зарегистрирован: 23 ноя 2013, 16:08
Сообщений: 1107
Откуда: Ukraine
Благодарил (а): 31 раз.
Поблагодарили: 175 раз.
JSON + Gson lib: MyObject -> json, json -> MyObject

_________________
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 янв 2017, 13:32 
Аватар пользователя

Зарегистрирован: 15 дек 2016, 14:57
Сообщений: 13
Откуда: Volgograd
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код: [ Загрузить ] [ Скрыть ]
  1. public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() { 
  2.     // распаковываем объект из Parcel 
  3.     public MyObject createFromParcel(Parcel in) { 
  4.       Log.d(LOG_TAG, "createFromParcel"); 
  5.       return new MyObject(in); 
  6.     } 


Ребятки, у меня вот тут почему-то ругается.. Говорит:
Изображение

Я что-то вообще не понимаю, что он от меня хочет.. Подскажете?

Писал сначала руками всё, как всегда - подумал, что где-то мой косяк. Второй раз скопипастил - нет, дело в чем-то другом.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 янв 2017, 13:35 
Аватар пользователя

Зарегистрирован: 15 дек 2016, 14:57
Сообщений: 13
Откуда: Volgograd
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Так, разобрался.. Дописал конструктор, считывающий из Parcel:

Код: [ Загрузить ] [ Скрыть ]
  1. private MyObject(Parcel parcel) { 
  2.     Log.d(LOG_TAG, "MyObject(Parcel parcel)"); 
  3.     s = parcel.readString(); 
  4.     i = parcel.readInt(); 
  5.   } 


Только все равно не понял, на что именно ругалась та ошибка, можно всё равно объяснений, пожалуйста?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 апр 2018, 17:09 

Зарегистрирован: 15 ноя 2017, 16:32
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Помогите с передачей данных... не могу найти решения.
Это задание перекликается с темой про Adapter.
У меня есть список Product где я описываю name и price, и имплементирую Parcelable.

1 Вопрос Как передать объект по выбранному элементу при нажатии кнопки?
В Mainactivity создаю список товаров (тут будет длинейший список из бананов и мартышек)

В Base Adapter передаю name,price и кнопку (с обработчиком), при нажатии которой товар добавляется в корзину.
Base Adapter выглядит следующим образом:
Цитата:
//пункт списка
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {view = Inflater.inflate(R.layout.item, parent, false);
}
Product p = getProduct(position);
//Заполняем View
((TextView) view.findViewById(R.id.tvDescr)).setText(p.name);
((TextView) view.findViewById(R.id.tvPrice)).setText(p.price + " рублей");
//Находим кнопку и присваиваем ей обработчик
Button btn_cart = (Button) view.findViewById(R.id.cartto);
btn_cart.setOnClickListener(oMyButton);
btn_cart.setTag(String.valueOf(position));
return view;
}
//Работа кнопки
View.OnClickListener oMyButton = new View.OnClickListener() {
public void onClick(View view) {
Intent intent = new Intent(ctx, Cart.class);
//как тут прописать значение name и price выбранного объекта, а не прописывать новый как например: Product myObj = new Product("text", 1);
Product myObj =.....
//Передаю данные в другое активити
intent.putExtra(Product.class.getCanonicalName(), myObj);
ctx.startActivity(intent);


Заранее всем спасибо! Я уже несколько дней бьюсь и не допру никак(((


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB