安卓绑定生成器失败

5

我定义了一个带有接口的AIDL文件。例如:

interface IResPlugin {
    int discoverType();
    Map onClick( in int id, in Map state );
    int getLayoutId(in int option);
    int getMeasures();
    String getName();
}

自动地,Eclipse会在gen文件夹中生成IResplugin.java文件,但是它生成的有误。以下是Eclipse生成的代码:

public java.util.Map onClick(int id, java.util.Map state) throws android.os.RemoteException
{
    android.os.Parcel _data = android.os.Parcel.obtain();
    android.os.Parcel _reply = android.os.Parcel.obtain();
    java.util.Map _result;
    try {
        _data.writeInterfaceToken(DESCRIPTOR);
        _data.writeInt(id);
        _data.writeMap(state);
        mRemote.transact(Stub.TRANSACTION_onClick, _data, _reply, 0);
        _reply.readException();
        _result = _reply.readHashMap(cl);
    }
    finally {
        _reply.recycle();
        _data.recycle();
    }
    return _result;
}

因为cl对象不存在,所以_result = _replu.readHashMap(cl)这行代码会崩溃。如果我手动添加这行代码(缺少一个类加载器),Eclipse会自动生成一个错误的版本来替换我的版本。

有什么想法吗?

1个回答

1

这看起来像是AIDL中的一个bug,值得在bug跟踪器中记录。

作为一种解决方法,您可以使用Bundle代替Map。

或者,另一种方法是实现自己的Parcelable类,其中包含Map<>,并将其用作返回类型。


仅供参考,我刚刚提交了一个问题:http://code.google.com/p/android/issues/detail?id=26841 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接