web-dev-qa-db-ja.com

ArrayListをParcelableにキャストできません

次のエラーが発生します:

  • キーcom..BookStatusはParcelableを期待していましたが、値はArrayListでした
  • ClassCastException:ArrayListをParcelableにキャストできません->以降:アクティビティを開始できません-NullPointerException
  • arrayListにはBookStatusオブジェクト(listToPass)の値があります

    • キーcom.example.books.BookStatusはParcelableを期待していましたが、値はJava.util.ArrayListでした。デフォルト値が返されました
    • 生成された内部例外をキャストしようとしました:
    • Java.lang.ClassCastException:Java.util.ArrayListをAndroid.os.Parcelableにキャストできません
    • com.example.books4locals.SearchActivity.onCreate(SearchActivity.Java:46)->これはbundle.getparcelableメソッドです

私に何ができる?

HomeActivity.Java

    ArrayList<BookStatus> listToPass = new ArrayList<BookStatus>(); // fill with smthg

        protected void onPostExecute(String result) {

            if (listToPass != null) {

                Intent i = new Intent(getApplicationContext(),
                        SearchActivity.class);
                //              ArrayList<BookStatus> bs = new ArrayList<BookStatus> (Arrays.asList(bArr));

                i.putParcelableArrayListExtra("com.example.books.BookStatus", listToPass);
                startActivity(i);

SearchActivity.Java

          protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.searchactivity_main);

            Bundle bundle = getIntent().getExtras();
            ArrayList<BookStatus> bookStatus = bundle
                    .getParcelable("com.example.books.BookStatus");

BookStatus.Java

         public class BookStatus implements Parcelable {

        public BookStatus() {
        }

        public BookStatus(Parcel in) {
            this.bookId=in.readInt();

            this.address=in.readString();
            this.name=in.readString();
            this.author=in.readString();
            this.lenderUserId=in.readInt();
            this.isbn=in.readInt();
            this.postcode=in.readString();
            this.town=in.readString();
            this.telnumber=in.readString();
            this.mail=in.readString();
            this.duration=in.readInt();
            }
                        @Override
            public int describeContents() {
                // TODO Auto-generated method stub
                return 0;
            }

            @Override
            public void writeToParcel(Parcel dest, int flags) {
                dest.writeInt(this.bookId);

                dest.writeString(this.address);
                dest.writeString(this.name);
                dest.writeString(this.author);
                dest.writeInt(this.lenderUserId);
                dest.writeInt(this.isbn);
                dest.writeString(this.postcode);
                dest.writeString(this.town);
                dest.writeString(this.telnumber);
                dest.writeString(this.mail);
                dest.writeInt(this.duration);

            }

             public void readFromParcel(Parcel parcel){
                    this.bookId = parcel.readInt();
                    this.address = parcel.readString();

                    this.name = parcel.readString();
                    this.author = parcel.readString();
                    this.lenderUserId = parcel.readInt();
                    this.isbn = parcel.readInt();
                    this.postcode = parcel.readString();
                    this.town = parcel.readString();
                    this.telnumber = parcel.readString();
                    this.mail = parcel.readString();
                    this.duration = parcel.readInt();
                  }




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

                 public BookStatus createFromParcel(Parcel in) {
             return new BookStatus(in);
         }

                 public BookStatus[] newArray(int size) {
             return new BookStatus[size];
         }
        };
16
flyOWX

変更してみてください

 i.putParcelableArrayListExtra("com.example.books.BookStatus", listToPass);

i.putExtra("com.example.books.BookStatus", listToPass);

そして

 bundle.getParcelable

 bundle.getParcelableArrayList
27
user2910110