- java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.box.androidsdk.content.models.BoxSession) #13
- Comments
- dshbq commented May 19, 2017 •
- doncung commented May 20, 2017
- dshbq commented May 22, 2017
- doncung commented May 22, 2017
- dshbq commented May 23, 2017 •
- doncung commented May 25, 2017
- Google Android — это несложно
- Урок 69. Передаем Parcelable объекты с помощью Intent
- Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Re: Урок 69. Передаем Parcelable объекты с помощью Intent
- Исправлено столбец IOException, записывающий сериализуемый объект getactivity ()
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.box.androidsdk.content.models.BoxSession) #13
Comments
dshbq commented May 19, 2017 •
Hello, I am using box preview sdk ‘com.box:box-android-preview-sdk:2.0.4’ , I am using the following code to launch boxPreviewActivity from my Activity:
In my code, i get boxItem from API response which i further use to create boxFile, but i get following exception when trying to call above method, it looks like some serliazation exception but why for BoxSession we are getting this error
Could you please check and it let me know the issue here.
The text was updated successfully, but these errors were encountered:
doncung commented May 20, 2017
Part of our logic serializes and deserializes sessions now instead of trying to recreate the session based on the user. This is to better handle shared links and device pinning as well as other custom types of sessions. I was trying out your logic with 2.04 using a shared link and a BoxSharedLinkSession with some slight modification, and was unable to reproduce. Can you share the json you are using in that boxItem in your test? (You can call toJson() as well as modify it replacing any sensitive info with stars I will need the file extension) Also how are you authenticating/using the session? Are you subclassing BoxSession? (Right before passing it to the builder print session.getAuthInfo().toJson() are all fields populated?) Are you doing anything in your build.gradle file (i.e. using other libraries including ours, support libraries, targetting a certain version)?
Hopefully I will be able to reproduce your issue, which will allow me to debug further.
dshbq commented May 22, 2017
@doncung Thanks for the reply!! i am using boxSession as a static object in my base class, and in each class check for null for boxSession, and if it is null i initialise it again.
Regarding other json, i m using that line to create boxFile since from server response i get BoxItem when trying to fetch files but launch method takes BoxFile as parameter.
Hope it helps you to understand the issue.
doncung commented May 22, 2017
Are you ever extending the BoxSession anonymously? The preview sdk does work with static sessions (it will essentially clone it) however because it uses serialization it does not work with anonymous classes. I can reproduce your issue if that is the case.
One thing that can be done is you can create a new class that extends BoxSession or a static class (Depending on what you are doing you might need to implement the readObject/writeObject methods)
You can also clone your session into a normal BoxSession before passing into the builder in which case it should no longer be anonymous.
dshbq commented May 23, 2017 •
@doncung I checked my session creation logic, i am using below code in my base class from :
The above sets a refresh provider in boxSession object.
So in the above code if i change the line
session = new BoxSession(this, info, refreshProvider);
to
session = new BoxSession(this, info, null);
Preview has started working but setting the refresh provider during the boxSession creation was to add refresh provider for box session token.
Please let me know if any change is required for session creation logic along with Refresh provider.
doncung commented May 25, 2017
I also tried this with your logic, and you can still use the refresh provider in the sdk if you make the «MyAuthenticationRefreshProvider» class static or by creating a separate java file for it. The sdk seems to have trouble serializing/deserializing it as just an inner public class.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
Google Android — это несложно
Добро пожаловать на форум сайта
Урок 69. Передаем Parcelable объекты с помощью Intent
Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение damager82 » 11 апр 2012, 23:00
— добавляем объекту поддержку Parcelable
— передаем с помощью Intent
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Gorets » 12 апр 2012, 11:15
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение damager82 » 12 апр 2012, 11:33
А потом меня кто-нить попросит объяснить подробней и мне нечего будет сказать. Мне это описание ни о чем не сказало. Я не понял как и для каких целей я могу использовать этот метод.
Если у вас есть примеры использования и вы понимаете смысл этого метода — пишите их сюда, я добавлю в урок эти сведения.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Gorets » 12 апр 2012, 13:08
public static final Parcelable.Creator CREATOR = new Parcelable.Creator () <
// распаковываем объект из Parcel
public MyParent createFromParcel(Parcel in)
<
Log.d(LOG_TAG, «createFromParcel»);
int description=in.readInt(); // получаем description
Serializable s=in.readSerializable(); // считываем собственно наш объект
switch(description)
< // приводим к нужному типу или кастомизируем как хочется и возвращаем готовый объект
case 1:
return (MyObjectChild1)s;
case 2:
return (MyObjectChild2)s;
default:
return (MyObject)s;
>
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение KamiSempai » 12 апр 2012, 13:57
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение damager82 » 12 апр 2012, 14:23
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение KamiSempai » 12 апр 2012, 15:01
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Gorets » 12 апр 2012, 16:44
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение irukanji » 26 май 2012, 13:07
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение damager82 » 28 май 2012, 09:38
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение irukanji » 28 май 2012, 18:15
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Prospekt » 30 май 2012, 23:36
Второй метод, по моему предположению, нужен для работы с массивами. Ведь парсить можно не только сам объект, но и массив таких объектов. Если бы я был парсером, то при восстановлении массива объектами мне нужно было:
1) создать сам массив объектов
2) заполнить этот массив значениями
Так вот, для того, чтобы выполнить пункт первый и нужен второй метод. Почему этот участок кода нельзя было автоматизировать я не знаю, возможно есть какое-то ограничение самого языка, и даный метод нужен, чтобы не ломать конструкции этого языка.
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Prospekt » 31 май 2012, 08:38
Спасибо за хорошие уроки. Смотрел много книг и блогов по разработке под Андрюше, но как-то желаемого не получил. А тут все понятно, достаточно добродно.
Я считаю, что слова
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение damager82 » 31 май 2012, 16:44
Re: Урок 69. Передаем Parcelable объекты с помощью Intent
Сообщение Prospekt » 11 июн 2012, 13:50
Второй метод, по моему предположению, нужен для работы с массивами. Ведь парсить можно не только сам объект, но и массив таких объектов. Если бы я был парсером, то при восстановлении массива объектами мне нужно было:
1) создать сам массив объектов
2) заполнить этот массив значениями
Так вот, для того, чтобы выполнить пункт первый и нужен второй метод. Почему этот участок кода нельзя было автоматизировать я не знаю, возможно есть какое-то ограничение самого языка, и даный метод нужен, чтобы не ломать конструкции этого языка.
Как это обычно и бывает, я оказался прав. Все дело в том,, что парсеру при сборе объекта нужно вернуть массив некоторого типа (если конечны сам объект содержит массивы), поэтому это массив нужно создать.
Есть такое ограничение языка java, как невозможность создавать экземпляры и массивы экземпляров параметрических классов. Т.е. вот так сделать нельзя:
То, что у класса T может и не быть пустого конструктора — это понятно. Но вот то, что нельзя создавать массивы параметрического класса — это для меня в некотором смысле новость.
Отсюда очевидно, что второй метод — это не прихоть разработчиков, это как говорится осознанная необходимость. У Parcelable просто нет других вариантов, поэтому создавать объекты и массивы поручили нам. А то, что сам Parcelable вынужден работать с классом-параметров наверное объяснять не надо.
PS: Приятно сделать интуитивное предположение, а потом его же и подтвердить. Придется себя похвалить.
Источник
Исправлено столбец IOException, записывающий сериализуемый объект getactivity ()
Поэтому я получаю это в logcat:
Я знаю, это означает, что мой ученический класс не сериализуем, но это мой класс учеников:
И это код, который использует метод getIntent ():
Пожалуйста, помогите мне разобраться, что случилось с этим.
Вот весь LogCat:
DSLL , что у DNode класса DNode есть внутренний статический класс DNode , а DNode не является Serializable .
Если вы не можете сделать сериализацию DNode хорошим решением, нужно добавить «переходный» к переменной.
Это будет игнорировать переменную при использовании Intent.putExtra (…).
Проблема возникает, когда ваш пользовательский класс имеет для свойства какой-либо другой класс, например «Bitmap». То, что я сделал, – это изменить поле свойства с «частной растровой фотографии» на «частную временную растровую фотографию». Однако после ввода getIntent () в работе приемника изображение пуст. Из-за этого я передал пользовательский класс в намерение, а также создал массив байтов из изображения и передал его отдельно для намерения:
SelectedItem – мой пользовательский объект, а getPlacePhoto – его метод получения изображения. Я уже установил его раньше, и теперь я просто получаю его сначала, чем конвертирую его и передаю его отдельно:
Затем в работе приемника я получаю свой объект и изображение в виде массива байтов, декодирует изображение и устанавливаю его в качестве объекта фотографии.
Я также фазу этой ошибки, и я немного изменился в ModelClass, которые реализованы Serializable интерфейс, как:
В этом классе модели также реализуется интерфейс Parcelable с методом переопределения writeToParcel ()
Затем просто появилась ошибка для «создания создателя», поэтому CREATOR записывает и также создает с конструктором класса класс с аргументами и без аргументов .
ИсполнительTrackClass -> ModelClass
Конструктор с аргументами Parcel «читаем наши атрибуты», а writeToParcel () – «писать наши атрибуты»,
Источник