首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android束在活动之间传递时被破坏了?

Android束在活动之间传递时被破坏了?
EN

Stack Overflow用户
提问于 2012-10-30 03:39:37
回答 1查看 1.4K关注 0票数 3

我试图在两个活动之间传递一个Parcelable对象的ArrayList加上一个字符串值。这是将数据添加到意图中并传递给它的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Intent intent = new Intent(this, DisplayLotListActivity.class);
Bundle dataBundle = new Bundle();
dataBundle.putParcelableArrayList(DisplayLotListActivity.EXTRA_LOT_ARRAY, lotList);
dataBundle.putString(EXTRA_LOT_NUMBER, lotNumber);
intent.putExtra(DisplayLotListActivity.EXTRA_DATA, dataBundle);
startActivity(intent);

这是我用来从目标活动的意图中获取数据的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Intent intent = getIntent();
Bundle dataBundle = intent.getBundleExtra(EXTRA_DATA);
lotList = dataBundle.getParcelableArrayList(EXTRA_LOT_ARRAY);
lotNumber = dataBundle.getString(LotInquiryActivity.EXTRA_LOT_NUMBER);

当我检查调试器时,在调用该活动之前,数据结构看起来是正确的,但是当我进入目标活动时,数据结构已经损坏。具体来说,ArrayList作为3个元素,其大小仍然是3个元素,但第二个元素为null。然后,在包中还有一个额外的附加项,其中包含了带有空键的缺少的元素对象。我有调试器的图像前后,但不能把他们在文章中,因为反垃圾邮件的规则。

前:http://i.stack.imgur.com/vDipq.png后:http://i.stack.imgur.com/JqbF7.png

我遗漏了什么吗?无论我是使用Bundle还是将ArrayList直接添加到意图中,都会发生此问题。这是运行在三星的Tab 2运行4.0.3。这在4.0模拟器中也会出现。

编辑这是正在使用的Parcelable对象(我刚刚把getter和setter方法放在了底部)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Lot implements Parcelable{

private String lotn;

private String dsc1;
private String dsc2;
private String litm;
private long itm;
private String locn;
private String mcu;
private String uom1;
private String uom2;
private BigDecimal pqav;
private BigDecimal pqoh;
private BigDecimal sqoh;
private long vend;
private String rlot;
private String ldsc;
private String lots;
private String lot1;
private String lot2;
private String lot3;
private String lotsdsc;
private XMLGregorianCalendar mmej;
private XMLGregorianCalendar ohdj;

public Lot(){

}

public Lot(Parcel source){
    lotn = source.readString();
    dsc1 = source.readString();
    dsc2 = source.readString();
    litm = source.readString();
    locn = source.readString();
    mcu = source.readString();
    uom1 = source.readString();
    uom2 = source.readString();
    itm = source.readLong();
    pqav = new BigDecimal(source.readString());
    pqoh = new BigDecimal(source.readString());
    sqoh = new BigDecimal(source.readString());
    vend = source.readLong();
    rlot = source.readString();
    ldsc = source.readString();
    lots = source.readString();
    lot1 = source.readString();
    lot2 = source.readString();
    lot3 = source.readString();
    lotsdsc = source.readString();
    try{
        mmej = DatatypeFactory.newInstance().newXMLGregorianCalendar(source.readString());
    }catch (Exception exc){
        mmej = null;
    }
    try{
        ohdj = DatatypeFactory.newInstance().newXMLGregorianCalendar(source.readString());
    }catch (Exception exc){
        ohdj = null;
    }
}

public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(lotn);
    dest.writeString(dsc1);
    dest.writeString(dsc2);
    dest.writeString(litm);
    dest.writeString(locn);
    dest.writeString(mcu);
    dest.writeString(uom1);
    dest.writeString(uom2);
    dest.writeLong(itm);
    if(pqav != null){
        dest.writeString(pqav.toPlainString());
    } else {
        dest.writeString("0");
    }
    if(pqoh != null){
        dest.writeString(pqoh.toPlainString());
    } else {
        dest.writeString("0");
    }
    if(sqoh != null){
        dest.writeString(sqoh.toPlainString());
    } else {
        dest.writeString("0");
    }
    dest.writeLong(vend);
    dest.writeString(rlot);
    dest.writeString(ldsc);
    dest.writeString(lots);
    dest.writeString(lot1);
    dest.writeString(lot2);
    dest.writeString(lot3);
    dest.writeString(lotsdsc);
    if(mmej != null){
        dest.writeString(mmej.toXMLFormat());
    } else {
        dest.writeString("");
    }
    if(ohdj != null){
        dest.writeString(ohdj.toXMLFormat());
    } else {
        dest.writeString("");
    }
}

/**
 *
 */
public static final Parcelable.Creator<Lot> CREATOR
         = new Parcelable.Creator<Lot>() {
     public Lot createFromParcel(Parcel in) {
         return new Lot(in);
     }

     public Lot[] newArray(int size) {
         return new Lot[size];
     }
 };
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 14:56:21

好的,对于任何回到这个问题的人来说,我发现了两个问题,我认为这两个问题共同导致了这种行为。这些问题都与我所使用的Parcelable对象有关,所以感谢托德至少指出了我这个方向。

首先,我有一个简单的错误,在我的Parcelable对象构造函数中遗漏了一个readString()。基本上,我是在写n个元素,然后用n-1元素来阅读。第二个问题是Android没有实现javax.xml.datatype库,这意味着XMLGregorianCalendar不可用。由于我在客户端不需要这个类的特性(有一个Java应用程序可以使用它),所以我只是将其转换为一个简单的java.util.Date对象。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13138207

复制
相关文章
Android - 使用Intent在活动之间穿梭
Intent有多个构造函数的重载,其中一个 Intent(Context packageContext,Class<?>cls)
博博1998
2022/04/25
5320
【Android基础】利用Intent在Activity之间传递数据
前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通。 从一个Activity获取返回结果: 启动一个Activity不仅仅是startActivity(Intent intent)一种方法,你也可以通过startActivityForResult()启动一个Activity并且在它退出的时候收到一个返回结果。 比如,你可以调用系统相机在你的应用中,拍了一张照片,然后返回到你的Acti
程序员互动联盟
2018/03/14
1.6K0
使用Intent在活动之间穿梭
Intent是Android中各组件进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据.
Dream城堡
2018/12/12
6050
ChatGPT被玩坏了
原理就不展开说了,因为我也不懂,写出来估计大家也都看不懂,就简单复制一段网上的介绍:
Crossin先生
2023/03/06
5400
ChatGPT被玩坏了
android fragement之间互相传递参数
在Activity中加载Fragment的时候、有时候要使用多个Fragment切换、并传值到另外一个Fragment、也就是说两个Fragment之间进行参数的传递、查了很多资料、找到两种方法、一种是通过共同的Activity传递、这种方法是在Activity里面添加一个字段、来临时保存要一些值。
再见孙悟空_
2023/02/10
6490
Android Activity之间的数据传递
在Android中,如果我们要通过一个Activity来启动另一个Activity,可以使用 startActivity(Intent intent)方法来传入一个Intent对象,这个Intent对象我们可以精确的指定我们需要跳转的Activity上,或者通过Intent对象来指定我们要完成的一个action操作,同时我们可以通过intent来携带一些值,进而来Activity见跳转的时候也可以把值传过去。
233333
2021/04/09
1.8K0
Android Activity之间的数据传递
[android] 在不同的activity之间传递数据
添加<TextView/>控件,设置控件内容水平居中,android:gravity=”center_horizontal”
唯一Chat
2019/09/10
2.3K0
[android] 在不同的activity之间传递数据
Android Activity之间的数据传递【转载】
在目标Activity【Main2Acitivity】销毁时,想让它可以回传数据给上一个Activity,这样需要改写前面的代码: 1、设置一个请求码标识当前Activity,让它跳转到目标Activity【Main2Activity】,
_DIY
2020/12/09
1.1K0
Clubhouse已经被玩坏了
Clubhouse这几天火到爆炸,为了跟上时代的步伐,我在2月2日安装了Clubhouse,费劲心血搞到一个邀请码,终于进去了。
ImportSource
2021/03/07
4570
结构体数组在函数之间传递数据
明的数组,进行函数调用时,实参将数组名中存放的数组首地址传递给形参数组名。这样,实参数组名和形参名代表的是同一个结构体数组,因此在被调函数中对数组元素结构体变量的值进行修改后,回到主调函数通过实参数组名访问数组时,可以发现这个改变。
pigeon
2022/04/11
1.9K0
结构体数组在函数之间传递数据
postman系列(五):在不同接口之间传递数据
为了更灵活地构造请求以及处理响应数据,postman提供了Pre-request-Script和Tests,在这两个标签中可以编写js代码辅助测试。
冰霜
2022/03/15
2K0
postman系列(五):在不同接口之间传递数据
结构体类型数据在函数之间的传递
(3)结构体变量也可以作为函数的返回值,使用 return语句从被调函数返回一个结构体变
pigeon
2022/04/11
2.1K0
结构体类型数据在函数之间的传递
使用 Spring Cloud Bus 在微服务之间传递消息
Spring Cloud Bus 是 Spring Cloud 微服务框架中的一个组件,可以用于在微服务之间传递消息,从而实现微服务之间的协调和通信。
堕落飞鸟
2023/04/18
7040
Activity之间传递参数
发送 intent.setClass(Bmi.this, Report.class); Bundle bundle = new Bundle(); bundle.putString("KEY_HEIGHT", field_height.getText().toString()); bundle.putString("KEY_WEIGHT", field_weight.getText().toString()); intent.putExtras(bundle); startActivity(intent);
用户1075292
2018/01/23
5960
微信指数:是的,我被玩坏了
昨天,微信指数刚上线,朋友圈就被各种热词刷屏,有些真是让人哭笑不得、欲哭无泪……下面来看看你们都开了哪些脑洞。 ►自恋党:搜自己!搜自己!搜自己! 这名字快二十万了,这是一大波“网红”要火的节奏啊。 ►崩坏型:我是来找同类的 当朋友圈出现“穷”、“减肥”、“傻”这些词出现的时候,莫名地心中一痛……我也给这些指数贡献了一把啊,泪目~ ►idol哪家强?看微信指数 偶像的人气也是杠杠的。 ►运营狗:PK大号热度 当然,昨晚好多自媒体的小伙伴已哭晕在厕所,不比还好一比气死人,还能不能好好玩耍。 ►
腾讯大讲堂
2018/03/01
1.1K0
微信指数:是的,我被玩坏了
使用 Spring Cloud Bus 在微服务之间传递消息示例
下面是一个完整的示例,演示如何使用 Spring Cloud Bus 在微服务之间传递消息。该示例包含两个微服务,一个是消息发送者,另一个是消息接收者。
堕落飞鸟
2023/04/18
1.3K3
前端页面之间传递参数
跨页面传递参数 这里有假如传递一个参数,在另一个页面接收时,只需要js中写入如下代码: localhost:8080/index.jsp?id=1 function showWindowHref
微醺
2019/01/17
1.2K0
Spring Cloud Bus在服务之间传递自定义事件(一)
Spring Cloud Bus是Spring Cloud生态系统中的一个组件,用于在分布式系统中传递消息和事件。除了提供消息总线的基本功能之外,它还可以用于在服务之间传递自定义事件。
堕落飞鸟
2023/04/16
6550
点击加载更多

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文