2011-11-04 19 views
5

Tôi đã xác định tệp AIDL bằng giao diện của mình. Một cái gì đó như thế này:Trình tạo trình kết nối Android không thành công

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

Tự động, Eclipse tạo IResplugin.java trong thư mục gen, nhưng nó sai. Đây là mã Eclipse tạo:

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; 
} 

Dòng _result = _replu.readHashMap(cl) tai nạn vì đối tượng cl không tồn tại. Nếu tôi thêm dòng này theo cách thủ công (một trình nạp lớp bị thiếu), Eclipse sẽ thay thế phiên bản của tôi cho bản thân được tạo ra (và một lần nữa, sai).

Bất kỳ ý tưởng nào?

Trả lời

1

Trông giống như một lỗi trợ giúp, điều đó rất đáng để nộp một lỗi trong trình theo dõi lỗi.

Là một công việc xung quanh, bạn có thể sử dụng Gói thay vì Bản đồ.

Hoặc cách tiếp cận khác bạn có thể thực hiện là triển khai lớp Parcelable của riêng bạn có chứa Bản đồ <> thay vào đó và sử dụng làm loại trả về.

+0

FYI, tôi vừa gửi một vấn đề: http://code.google.com/p/android/issues/detail?id=26841 – CommonsWare