Урок 69. Передаем Parcelable объекты с помощью Intent
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Скрин вырви глаз какой-то. Не объявляйте метод onClick в XML файле, делайте это исключительно через код.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Скрин реально доставляет))
а ошибка может быть из-за того, что, выражаяcь понятным языком, метод клика не найдет (или его вообще нет или сигнатура не совпала (должно быть:))
Поэтому, как сказали выше, лучше через xml этого не делать )
а ошибка может быть из-за того, что, выражаяcь понятным языком, метод клика не найдет (или его вообще нет или сигнатура не совпала (должно быть:
Код: Выделить всё
public void <название из xml>(View v)
Поэтому, как сказали выше, лучше через xml этого не делать )
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Есть вопрос по поводу 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 Вопрос решил, использованием интерфейса сериализации.
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. Ошибка
У меня была такая же ошибка пока я SecondActivity не прописал в AndroidManifest файле.Superoleg писал(а):все вроде бы стартует, а при попытке нажать на кнопку выдает такую ошибку
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Всем привет. У меня следующая ситуация. Есть объект с полями
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
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
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Похоже, что не сериализуется мой класс, потому что он содержит AsyncTask в качестве внутреннего класса. Но вопрос по Parcelable по-прежнему открыт.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Parcellable быстрее, чем Serializable. Пруфлинк: http://habrahabr.ru/post/174015/
Если у тебя парочка простых параметров, то intent.putExtra() - самое оно. Но когда нужно передавать большие объемы данных между Activity или объекты между фрагментами - Parcellable будет самым оптимальным, имхо. Итак, разница:
Где применять:
Если у тебя парочка простых параметров, то intent.putExtra() - самое оно. Но когда нужно передавать большие объемы данных между Activity или объекты между фрагментами - Parcellable будет самым оптимальным, имхо. Итак, разница:
- 1. интерфейс Serializable - удобно, "java-styled", но медленно;
2. интерфейс Parcellable - "android-specific", менее удобно, зато резво
Где применять:
- 1. intent.putExtra() - при передаче нескольких параметров;
2. Serializable - при передаче НЕбольших объектов/при передаче МАЛОГО количества объектов;
3. Parcellable - при передаче больших объектов/при передаче БОЛЬШОГО количества объектов + <имхо> при "общении" фрагментов и основной активити</имхо>;
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Спасибо з урок. Обсуждение на форуме очень помогло в усвоении информации.
Очевидно, что львиная доля полезности в обсуждении идет от опытных "обитателей" за что им большое спасибо.
Пожелание к уроку/урокам: отдельно уделять время реальным примерам и практике использования тех технологий, которые разбираются в конкретном уроке.
Например - тема интерфейс Parcelable - сразу же объяснить зачем и когда он используется. Какие есть аналоги и когда они используются (например отличие от Serializable, или почему данные нельзя просто передавать как putExtra или в Preferences или в БД или в файлик или как значения статических полей и т.д.)
Очевидно, что львиная доля полезности в обсуждении идет от опытных "обитателей" за что им большое спасибо.
Пожелание к уроку/урокам: отдельно уделять время реальным примерам и практике использования тех технологий, которые разбираются в конкретном уроке.
Например - тема интерфейс Parcelable - сразу же объяснить зачем и когда он используется. Какие есть аналоги и когда они используются (например отличие от Serializable, или почему данные нельзя просто передавать как putExtra или в Preferences или в БД или в файлик или как значения статических полей и т.д.)
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
JSON + Gson lib: MyObject -> json, json -> MyObject
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Код: Выделить всё
public static final Parcelable.Creator<MyObject> CREATOR = new Parcelable.Creator<MyObject>() {
// распаковываем объект из Parcel
public MyObject createFromParcel(Parcel in) {
Log.d(LOG_TAG, "createFromParcel");
return new MyObject(in);
}
Я что-то вообще не понимаю, что он от меня хочет.. Подскажете?
Писал сначала руками всё, как всегда - подумал, что где-то мой косяк. Второй раз скопипастил - нет, дело в чем-то другом.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Так, разобрался.. Дописал конструктор, считывающий из Parcel:
Только все равно не понял, на что именно ругалась та ошибка, можно всё равно объяснений, пожалуйста?
Код: Выделить всё
private MyObject(Parcel parcel) {
Log.d(LOG_TAG, "MyObject(Parcel parcel)");
s = parcel.readString();
i = parcel.readInt();
}
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Помогите с передачей данных... не могу найти решения.
Это задание перекликается с темой про Adapter.
У меня есть список Product где я описываю name и price, и имплементирую Parcelable.
1 Вопрос Как передать объект по выбранному элементу при нажатии кнопки?
В Mainactivity создаю список товаров (тут будет длинейший список из бананов и мартышек)
В Base Adapter передаю name,price и кнопку (с обработчиком), при нажатии которой товар добавляется в корзину.
Base Adapter выглядит следующим образом:
Это задание перекликается с темой про 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);
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
У меня не работало, пока не добавил SecondActivity в AndroidManifest.xml