android.os.parcelable,android.os.Parcelable[] cannot be cast to... Error - Stack Overflow

I'm doing a project for my class and I'm having an issue with it. I get the following error when I add a book There is a parcelable authors class that will be an array and a parcelable books class. The authors get stored in the book parcelable :

Error:

java.lang.RuntimeException: Failure delivering result ResultInfo

{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity

{edu.stevens.cs522.bookstore/edu.stevens.cs522.bookstore.activities.BookStoreActivity}:

java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to

edu.stevens.cs522.bookstore.entities.Author[]

at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)

Code

Author:

package edu.stevens.cs522.bookstore.entities;

import android.os.Parcel;

import android.os.Parcelable;

public class Author implements Parcelable {

public String firstName = null;

public String middleInitial = null;

public String lastName = null;

public Author(String[] authorName) {

if (authorName.length == 1) {

this.lastName = authorName[0];

} else if (authorName.length == 2) {

this.firstName = authorName[0];

this.lastName = authorName[1];

} else if (authorName.length >= 3) {

this.firstName = authorName[0];

this.middleInitial = authorName[1];

this.lastName = authorName[2];

} else if (authorName.length == 0) {

//nothing needs to be done

}

}

public Author(String firstName, String middleInitial, String lastName) {

this.firstName = firstName;

this.middleInitial = middleInitial;

this.lastName = lastName;

}

public Author(Parcel in) {

String[] data = new String[3];

in.readStringArray(data);

this.firstName = data[0];

this.middleInitial = data[1];

this.lastName = data[2];

}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

public Author createFromParcel(Parcel in) {

return new Author(in);

}

public Author[] newArray(int size) {

return new Author[size];

}

};

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

String[] array = new String[3];

array[0] = this.firstName;

array[1] = this.middleInitial;

array[2] = this.lastName;

dest.writeStringArray(array);

}

}

Code Book:

package edu.stevens.cs522.bookstore.entities;

import android.os.Parcel;

import android.os.Parcelable;

public class Book implements Parcelable {

// TODO Modify this to implement the Parcelable interface.

// TODO redefine toString() to display book title and price (why?).

public int id;

public String title;

public String isbn;

public String price;

public Author[] authors;

public Book(int id, String title, Author[] author, String isbn, String price) {

this.id = id;

this.title = title;

this.authors = new Author[author.length];

for (int i = 0; i < author.length; i++) {

authors[i] = author[i];

}

this.isbn = isbn;

this.price = price;

}

public Book(Parcel in) {

int intdata = in.readInt();

this.id = intdata;

String[] data = new String[3];

in.readStringArray(data);

this.title = data[0];

this.isbn = data[1];

this.price = data[2];

Author[] authorsT = (Author[]) in.readParcelableArray(Author.class.getClassLoader());

this.authors = new Author[authorsT.length];

for (int i = 0; i < authorsT.length; i++) {

authors[i] = authorsT[i];

}

}

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

public Book createFromParcel(Parcel in) {

return new Book(in);

}

public Book[] newArray(int size) {

return new Book[size];

}

};

@Override

public int describeContents() {

return 0;

}

@Override

public void writeToParcel(Parcel dest, int flags) {

dest.writeInt(id);

String[] data = new String[3];

data[0] = title;

data[1] = isbn;

data[2] = price;

dest.writeStringArray(data);

if (authors == null) {

authors = new Author[1];

}

dest.writeParcelableArray(authors, flags);

}

@Override

public String toString() {

return isbn;

}

}

Where the book and author objects are created:

public Book searchBook() {

/*

* Search for the specified book.

*/

// TODO Just build a Book object with the search criteria and return that.

EditText editAuthor = (EditText) findViewById(R.id.search_author);

String authorString = editAuthor.getText().toString();

String[] authors = authorString.split(", ");

Author[] authorsArray = new Author[authors.length];

for (int i = 0; i < authors.length; i++) {

authorsArray[i] = new Author(authors[i].split(" "));

}

EditText editTitle = (EditText) findViewById(R.id.search_title);

EditText editIsbn = (EditText) findViewById(R.id.search_isbn);

String title = editTitle.getText().toString();

String isbn = editIsbn.getText().toString();

Log.e(title, authorsArray[0].lastName);

Log.e("isbn:", isbn);

Book newBook = new Book(100, title, authorsArray, isbn, "10");

return newBook;

}

How the intent is called:

Book resultBook = searchBook();

Intent result = new Intent();

result.putExtra(BOOK_RESULT_KEY, resultBook);

setResult(RESULT_OK, result);

finish();

And the code in my onActivityResult:

if(requestCode == ADD_REQUEST) {

Bundle data = intent.getExtras();

Book book = (Book)data.getParcelable(AddBookActivity.BOOK_RESULT_KEY);

Log.e ("BOOK_TITLE", book.title);

}

Can anyone help me figure out what I'm doing wrong to be getting that error?

java.lang.RuntimeException: Failure delivering result ResultInfo

{who=null, request=1, result=-1, data=Intent { (has extras) }} to activity

{edu.stevens.cs522.bookstore/edu.stevens.cs522.bookstore.activities.BookStoreActivity}:

java.lang.ClassCastException: android.os.Parcelable[] cannot be cast to

edu.stevens.cs522.bookstore.entities.Author[]

at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值