2015-08-08 5 views
0

У меня возникла проблема с распараллеливанием смежного объекта. Исключение не воспроизводится каждый раз, но иногда да. Вот определение parcelable объекта:Исключение исключения для разметки в предметном объекте

public class Article extends DBOperationHolder implements Parcelable { 

private static final String TAG = "Article_Object"; 

@SerializedName("article_id") 
private int mId; 

@SerializedName("city_id") 
private int mCityId; 

@SerializedName("categories") 
private List<Integer> mCategories; 

@SerializedName("neighborhood_tags") 
private List<Integer> mNeighborhoodTags; 

@SerializedName("cuisine_tags") 
private List<Integer> mCuisineTags; 

@SerializedName("collection_articles") 
private List<Integer> mCollectionArticles; 

@SerializedName("rating") 
private int mRating; 

@SerializedName("title") 
private String mTitle; 

@SerializedName("subtitle") 
private String mSubTitle; 

@SerializedName("summary") 
private String mSummary; 

@SerializedName("text") 
private String mText; 

@SerializedName("main_image_url") 
private String mMainImgUrl; 

@SerializedName("images") 
private List<String> mImages; 

@SerializedName("date_from") 
private String mDateFrom; 

@SerializedName("date_to") 
private String mDateTo; 

@SerializedName("venue_name") 
private String mVenueName; 

@SerializedName("address") 
private String mAddress; 

@SerializedName("address_latitude") 
private double mAddressLatitude; 

@SerializedName("address_longitude") 
private double mAddressLongitude; 

@SerializedName("contact_person") 
private String mContactPerson; 

@SerializedName("contact_email") 
private String mContactEmail; 

@SerializedName("contact_telephone") 
private String mContactTelephone; 

@SerializedName("contact_website") 
private String mContactWebsite; 

@SerializedName("style") 
private String mStyle; 

@SerializedName("ideal_for") 
private String mIdealFor; 

@SerializedName("favorite_tables") 
private String mFavoriteTables; 

@SerializedName("favorite_room") 
private String mFavoriteRoom; 

@SerializedName("signature_dishes") 
private String mSignatureDishes; 

@SerializedName("signature_drinks") 
private String mSignatureDrinks; 

@SerializedName("highlights") 
private String mHighLights; 

@SerializedName("type") 
private String mType; 

@SerializedName("membership_price") 
private String mMemberShipPrice; 

@SerializedName("membership_benefits") 
private String mMemberShipBenefits; 

@SerializedName("publish_date") 
private String mPublishDate; 

@SerializedName("article_url") 
private String mArticleUrl; 

private String mTag; 
private boolean mIsCollection; 
private int mIsAddedInFavorites; 
private int mCategoryColor; 
private String mCuisine; 
private int mCategoryId; 

public Article() { 

} 

public Article(int id) { 
    mId = id; 
} 

private Article(Parcel in) { 
    mId = in.readInt(); 
    mCityId = in.readInt(); 
    mRating = in.readInt(); 
    mTitle = in.readString(); 
    mSubTitle = in.readString(); 
    mSummary = in.readString(); 
    mText = in.readString(); 
    mMainImgUrl = in.readString(); 
    mDateFrom = in.readString(); 
    mDateTo = in.readString(); 
    mVenueName = in.readString(); 
    mAddress = in.readString(); 
    mAddressLatitude = in.readFloat(); 
    mAddressLongitude = in.readFloat(); 
    mContactPerson = in.readString(); 
    mContactEmail = in.readString(); 
    mContactTelephone = in.readString(); 
    mContactWebsite = in.readString(); 
    mStyle = in.readString(); 
    mIdealFor = in.readString(); 
    mFavoriteTables = in.readString(); 
    mFavoriteRoom = in.readString(); 
    mSignatureDishes = in.readString(); 
    mSignatureDrinks = in.readString(); 
    mHighLights = in.readString(); 
    mType = in.readString(); 
    mMemberShipPrice = in.readString(); 
    mMemberShipBenefits = in.readString(); 
    mPublishDate = in.readString(); 
    mIsAddedInFavorites = in.readInt(); 
    mTag = in.readString(); 
    mCategoryColor = in.readInt(); 
    mCuisine = in.readString(); 
    mCategoryId = in.readInt(); 
    mArticleUrl = in.readString(); 
} 

@Override 
public void writeToParcel(Parcel parcel, int flags) { 
    parcel.writeInt(mId); 
    parcel.writeInt(mCityId); 
    parcel.writeInt(mRating); 
    parcel.writeString(mTitle); 
    parcel.writeString(mSubTitle); 
    parcel.writeString(mSummary); 
    parcel.writeString(mText); 
    parcel.writeString(mMainImgUrl); 
    parcel.writeString(mDateFrom); 
    parcel.writeString(mDateTo); 
    parcel.writeString(mVenueName); 
    parcel.writeString(mAddress); 
    parcel.writeDouble(mAddressLatitude); 
    parcel.writeDouble(mAddressLongitude); 
    parcel.writeString(mContactPerson); 
    parcel.writeString(mContactEmail); 
    parcel.writeString(mContactTelephone); 
    parcel.writeString(mContactWebsite); 
    parcel.writeString(mStyle); 
    parcel.writeString(mIdealFor); 
    parcel.writeString(mFavoriteTables); 
    parcel.writeString(mFavoriteRoom); 
    parcel.writeString(mSignatureDishes); 
    parcel.writeString(mSignatureDrinks); 
    parcel.writeString(mHighLights); 
    parcel.writeString(mType); 
    parcel.writeString(mMemberShipPrice); 
    parcel.writeString(mMemberShipBenefits); 
    parcel.writeString(mPublishDate); 
    parcel.writeInt(mIsAddedInFavorites); 
    parcel.writeString(mTag); 
    parcel.writeInt(mCategoryColor); 
    parcel.writeString(mCuisine); 
    parcel.writeInt(mCategoryId); 
    parcel.writeString(mArticleUrl); 
} 


@Override 
public int describeContents() { 
    return 0; 
} 

public static Creator<Article> CREATOR = new Creator<Article>() { 
    @Override 
    public Article createFromParcel(Parcel source) { 
     return new Article(source); 
    } 

    @Override 
    public Article[] newArray(int size) { 
     return new Article[size]; 
    } 
}; 


public String getMainImgUrl() { 
    if (TextUtils.isEmpty(mMainImgUrl)) { 
     if (!CollectionUtil.isEmpty(mImages)) { 
      mMainImgUrl = mImages.get(0); 
     } 
    } 
    return mMainImgUrl; 
} 

public int getId() { 
    return mId; 
} 

public void setId(int id) { 
    mId = id; 
} 

public int getCityId() { 
    return mCityId; 
} 

public void setCityId(int cityId) { 
    mCityId = cityId; 
} 

public List<Integer> getCategories() { 
    return mCategories; 
} 

public void setCategories(List<Integer> categories) { 
    mCategories = categories; 
} 

public List<Integer> getNeighborhoodTags() { 
    return mNeighborhoodTags; 
} 

public void setNeighborhoodTags(List<Integer> neighborhoodTags) { 
    mNeighborhoodTags = neighborhoodTags; 
} 

public List<Integer> getCuisineTags() { 
    return mCuisineTags; 
} 

public void setCuisineTags(List<Integer> cuisineTags) { 
    mCuisineTags = cuisineTags; 
} 

public List<Integer> getCollectionArticles() { 
    return mCollectionArticles; 
} 

public void setCollectionArticles(List<Integer> collectionArticles) { 
    mCollectionArticles = collectionArticles; 
} 

public int getRating() { 
    return mRating; 
} 

public void setRating(int rating) { 
    mRating = rating; 
} 

public String getTitle() { 
    return mTitle; 
} 

public void setTitle(String title) { 
    mTitle = title; 
} 

public String getSubTitle() { 
    return mSubTitle; 
} 

public void setSubTitle(String subTitle) { 
    mSubTitle = subTitle; 
} 

public String getSummary() { 
    return mSummary; 
} 

public void setSummary(String summary) { 
    mSummary = summary; 
} 

public String getText() { 
    return mText; 
} 

public void setText(String text) { 
    mText = text; 
} 

public void setMainImgUrl(String mainImgUrl) { 
    mMainImgUrl = mainImgUrl; 
} 

public List<String> getImages() { 
    return mImages; 
} 

public void setImages(List<String> images) { 
    mImages = images; 
} 

public String getDateFrom() { 
    return mDateFrom; 
} 

public void setDateFrom(String dateFrom) { 
    mDateFrom = dateFrom; 
} 

public String getDateTo() { 
    return mDateTo; 
} 

public void setDateTo(String dateTo) { 
    mDateTo = dateTo; 
} 

public String getVenueName() { 
    return mVenueName; 
} 

public void setVenueName(String venueName) { 
    mVenueName = venueName; 
} 

public String getAddress() { 
    return mAddress; 
} 

public void setAddress(String address) { 
    mAddress = address; 
} 

public double getLatitude() { 
    return mAddressLatitude; 
} 

public void setLatitude(double addressLatitude) { 
    mAddressLatitude = addressLatitude; 
} 

public double getLongitude() { 
    return mAddressLongitude; 
} 

public void setLongitude(double addressLongitude) { 
    mAddressLongitude = addressLongitude; 
} 

public String getContactPerson() { 
    return mContactPerson; 
} 

public void setContactPerson(String contactPerson) { 
    mContactPerson = contactPerson; 
} 

public String getContactEmail() { 
    return mContactEmail; 
} 

public void setContactEmail(String contactEmail) { 
    mContactEmail = contactEmail; 
} 

public String getContactTelephone() { 
    return mContactTelephone; 
} 

public void setContactTelephone(String contactTelephone) { 
    mContactTelephone = contactTelephone; 
} 

public String getContactWebsite() { 
    return mContactWebsite; 
} 

public void setContactWebsite(String contactWebsite) { 
    mContactWebsite = contactWebsite; 
} 

public String getStyle() { 
    return mStyle; 
} 

public void setStyle(String style) { 
    mStyle = style; 
} 

public String getIdealFor() { 
    return mIdealFor; 
} 

public void setIdealFor(String idealFor) { 
    mIdealFor = idealFor; 
} 

public String getFavoriteTables() { 
    return mFavoriteTables; 
} 

public void setFavoriteTables(String favoriteTables) { 
    mFavoriteTables = favoriteTables; 
} 

public String getFavoriteRoom() { 
    return mFavoriteRoom; 
} 

public void setFavoriteRoom(String favoriteRoom) { 
    mFavoriteRoom = favoriteRoom; 
} 

public String getSignatureDishes() { 
    return mSignatureDishes; 
} 

public void setSignatureDishes(String signatureDishes) { 
    mSignatureDishes = signatureDishes; 
} 

public String getSignatureDrinks() { 
    return mSignatureDrinks; 
} 

public void setSignatureDrinks(String signatureDrinks) { 
    mSignatureDrinks = signatureDrinks; 
} 

public String getHighLights() { 
    return mHighLights; 
} 

public void setHighLights(String highLights) { 
    mHighLights = highLights; 
} 

public String getType() { 
    return mType; 
} 

public void setType(String type) { 
    mType = type; 
} 

public String getMemberShipPrice() { 
    return mMemberShipPrice; 
} 

public void setMemberShipPrice(String memberShipPrice) { 
    mMemberShipPrice = memberShipPrice; 
} 

public String getMemberShipBenefits() { 
    return mMemberShipBenefits; 
} 

public void setMemberShipBenefits(String memberShipBenefits) { 
    mMemberShipBenefits = memberShipBenefits; 
} 

public String getPublishDate() { 
    return mPublishDate; 
} 

public void setPublishDate(String publishDate) { 
    mPublishDate = publishDate; 
} 

public String getArticleUrl() { 
    return mArticleUrl; 
} 

public void setArticleUrl(String articleUrl) { 
    mArticleUrl = articleUrl; 
} 

public String getTag() { 
    return mTag; 
} 

public void setTag(String tag) { 
    UrbLog.d(TAG,"setTag("+tag+")"); 
    mTag = tag; 
} 

public boolean isCollection() { 
    return mCategoryId == Category.COLLECTION_ID; 
} 

public int getIsAddedInFavorites() { 
    return mIsAddedInFavorites; 
} 

public void setIsAddedInFavorites(int isAddedInFavorites) { 
    mIsAddedInFavorites = isAddedInFavorites; 
} 

public int getCategoryColor() { 
    return mCategoryColor; 
} 

public void setCategoryColor(int categoryColor) { 
    mCategoryColor = categoryColor; 
} 

public String getCuisine() { 
    return mCuisine; 
} 

public void setCuisine(String cuisine) { 
    mCuisine = cuisine; 
} 

public int getCategoryId() { 
    return mCategoryId; 
} 

public void setCategoryId(int categoryId) { 
    mCategoryId = categoryId; 
} 

}

I`m пытается распаковать в parcelable в методе OnCreate фрагмента здесь

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle args = getArguments(); 
    if (args != null) { 
     mArticle = args.getParcelable(Consts.ARTICLE_KEY); 
    } 
} 

Тогда не каждый раз, когда я получил сбой в следующем состоянии:

Caused by: java.lang.RuntimeException: Parcel [email protected]: Unmarshalling unknown type code 7602280 at offset 4068 
    at android.os.Parcel.readValue(Parcel.java:2222) 
    at android.os.Parcel.readArrayMapInternal(Parcel.java:2479) 
    at android.os.BaseBundle.unparcel(BaseBundle.java:221) 
    at android.os.Bundle.getParcelable(Bundle.java:804) 
    at com.appscollider.urbanologie.fragments.ArticleFragment.onCreate(ArticleFragment.java:233) 
    at android.support.v4.app.Fragment.performCreate(Fragment.java:1766) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:917) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1120) 
    at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:1924) 
    at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:268) 
    at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:58) 

Что такое причина этого исключения и как я мог это исправить. Спасибо.

ответ

0

Ваш mAddressLatitude и mAddressLongitude имеют тип двойных и вы демаршаллизации их типа поплавка:

mAddressLatitude = in.readFloat(); 
mAddressLongitude = in.readFloat(); 

Если вы пишете как удвоить это должно быть:

mAddressLatitude = in.readDouble(); 
mAddressLongitude = in.readDouble(); 
+0

Хорошо, но в этом случай, почему этот код работает на некоторых устройствах, я имею в виду, иногда крах приложения, а не КАЖДЫЙ раз? – user1106234

+0

На это было бы трудно ответить. Но попробовали ли вы обновить свой unmarshalling код с вышеуказанными изменениями, а затем проверить, работает ли он на устройствах, с которыми приложение разбилось раньше? – androholic

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

  • Нет связанных вопросов^_^