【问题标题】:passing list throug intent to another activity通过意图将列表传递给另一个活动
【发布时间】:2017-06-10 13:28:25
【问题描述】:

我正在尝试将列表传递给下一个活动,但它给了我 classcast 异常我该如何解决它?我正在模型类中实现可序列化。 有人帮我解决这个问题。

List<PagesSqliteData>pagesSqliteDataArrayList = new ArrayList<>();
            PagesSqliteData pagesSqlite = new PagesSqliteData();
        pagesSqlite.setToc_name(bookingsSqliteDataArrayList.get(position).getToc_name());
         pagesSqlite.setCompletion(bookingsSqliteDataArrayList.get(position).getCompletion());

        pagesSqlite.setCategory_id(bookingsSqliteDataArrayList.get(position).getCategory_id());

        pagesSqlite.setBooking_id(bookingsSqliteDataArrayList.get(position).getBooking_id());
        pagesSqlite.setTable_of_content_id(bookingsSqliteDataArrayList.get(position).getTable_of_content_id());

        pagesSqliteDataArrayList.add(pagesSqlite);

        Intent i = new Intent(MyBookings.this, Pages.class);
            i.putExtra("LIST",pagesSqliteDataArrayList);
            startActivity(i);
    }

在下一个活动中像这样获取:

PagesSqliteData details = (PagesSqliteData)getIntent().getSerializableExtra("LIST");

【问题讨论】:

    标签: android android-intent arraylist


    【解决方案1】:

    您得到一个 ClassCastException 的原因很简单。看看你的代码的这个注释版本:

    List<PagesSqliteData>pagesSqliteDataArrayList = new ArrayList<>();//HERE YOU CREATE AN ARRAYLIST!!!
            PagesSqliteData pagesSqlite = new PagesSqliteData();
        pagesSqlite.setToc_name(bookingsSqliteDataArrayList.get(position).getToc_name());
         pagesSqlite.setCompletion(bookingsSqliteDataArrayList.get(position).getCompletion());
    
        pagesSqlite.setCategory_id(bookingsSqliteDataArrayList.get(position).getCategory_id());
    
        pagesSqlite.setBooking_id(bookingsSqliteDataArrayList.get(position).getBooking_id());
        pagesSqlite.setTable_of_content_id(bookingsSqliteDataArrayList.get(position).getTable_of_content_id());
    
        pagesSqliteDataArrayList.add(pagesSqlite);
    
        Intent i = new Intent(MyBookings.this, Pages.class);
            i.putExtra("LIST",pagesSqliteDataArrayList);
            startActivity(i);
    

    当你加载时:

    PagesSqliteData details = (PagesSqliteData)getIntent().getSerializableExtra("LIST");//HERE IT IS SUDDENLY A SINGLE OBJECT
    

    所以当你保存时,忽略arrayList。改为传递 pagesSqlite。并确保这个类是 Serializable 或 Parcelable。或者在加载时,将其加载到 ArrayList 中。你所做的相当于:

    PagesSqliteData data = new ArrayList<PagesSqliteData>();
    

    这是你做不到的。

    【讨论】:

      【解决方案2】:

      如果 E 类型是 Serializable,你可以用同样的方式传递一个 ArrayList。

      调用 Intent 的 putExtra(String name, Serializable value) 进行存储,调用 getSerializableExtra(String name) 进行检索。

      例子:

      ArrayList<String> myList = new ArrayList<String>();
      intent.putExtra("mylist", myList);
      In the other Activity:
      
      ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
      

      [参考:] [How to pass ArrayList<CustomeObject> from one activity to another?1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 2017-04-10
        • 1970-01-01
        • 1970-01-01
        • 2018-05-07
        相关资源
        最近更新 更多