Java EclipseSWT-如何从';id';到一个可用的类型

Java EclipseSWT-如何从';id';到一个可用的类型,java,objective-c,ios,serialization,Java,Objective C,Ios,Serialization,我正在尝试为以前只支持基于iPhone的客户端的客户端/服务器应用程序创建一个Android客户端。服务器的设计并不是为了支持其他设备,我需要能够处理的一些数据存储为字节块,这些字节是通过在iPhone客户端上使用NSKeyedArchiver序列化NSDictionary生成的 为了处理反序列化,我尝试使用EclipseSWT,它包括CocoaAPI调用和类的Java绑定,包括NSKeyedArchiver和nskeyedNarchiver。这些看起来很有效,但是NSKeyedUnarchiv

我正在尝试为以前只支持基于iPhone的客户端的客户端/服务器应用程序创建一个Android客户端。服务器的设计并不是为了支持其他设备,我需要能够处理的一些数据存储为字节块,这些字节是通过在iPhone客户端上使用
NSKeyedArchiver
序列化
NSDictionary
生成的

为了处理反序列化,我尝试使用EclipseSWT,它包括CocoaAPI调用和类的Java绑定,包括
NSKeyedArchiver
nskeyedNarchiver
。这些看起来很有效,但是
NSKeyedUnarchiver.unarchiveObjectWithData()
返回一个
id
类型,我还没有弄清楚如何将它转换成可用的类型(它实际上应该是一个
NSDictionary
)。显然,在objective-c中使用一个简单的cast就可以做到这一点,但是在Java中尝试同样的方法会在运行时抛出一个
ClassCastException

线程“main”java.lang.ClassCastException中的异常: org.eclipse.swt.internal.cocoa.id不能强制转换为 org.eclipse.swt.internal.cocoa.NSDictionary

我正在测试的代码是:

public static void main(String[] args) throws Exception {
    NSAutoreleasePool pool = (NSAutoreleasePool)new NSAutoreleasePool().alloc().init();

    //read the test data into a byte array
    int read = 0;
    byte[] buffer = new byte[1024];
    FileInputStream in = new FileInputStream(INPUT);
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    while((read = in.read(buffer)) != -1) {
        bytes.write(buffer, 0, read);
    }
    buffer = bytes.toByteArray();

    System.out.println("Read " + buffer.length + " bytes");

    //load the byte array into an NSData instance
    NSData data = NSData.dataWithBytes(buffer, buffer.length);

    //deserialize the data              
    id result = NSKeyedUnarchiver.unarchiveObjectWithData(data);

    //error here
    NSDictionary dictionaryResult = (NSDictionary)result;

    pool.release();
}

所以我需要做什么才能将'result'从
id
转换成更有用的东西,比如
NSDictionary

呸,没关系,我想出来了。从
id
到SWT中可用的东西的方法是构造所需具体类型的新实例,将
id
作为参数传递给构造函数。比如:

NSDictionary dictionaryResult = new NSDictionary(result);

想想看,这很明显。

在Android设备上执行此代码时,它真的起作用了吗?据我所知,SWT使用JavaObjective C桥来执行此代码。@grundprinzip-不,它在Android设备上不起作用。事实上,我很确定这段代码只能在Mac上正常工作。不管怎样,我使用它的方式是,Mac服务器在应用程序的服务器端数据库上运行SWT代码。它处理本机iOS数据结构,将其转换为JSON,然后将JSON存储在数据库中。Android客户端下载JSON数据,一切正常。我正在尝试做类似的事情,我需要读写NSKeyedArchiver,你能告诉我你为完成这项工作所采取的一些步骤吗?