2011-05-11 49 views
0

我使用的是Android 1.6和Android版的Restlet 2.0.7版...的Android的Restlet裹崩潰

它崩潰的包():

ClientResource cr = new ClientResource("http://myapp.appspot.com/restlet/"); 
IRestletResource r = cr.wrap(IRestletResource.class); 
MyData[] ss = r.getDatas(); 

05-10 20:40:56.272: ERROR/AndroidRuntime(435): java.lang.RuntimeException: Unable to start activity ComponentInfo{se.myapp.android/se.myapp.android.MyAppAndroid}: java.lang.NoSuchMethodException 
... 
05-10 20:40:56.272: ERROR/AndroidRuntime(435): Caused by: java.lang.NoSuchMethodException 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.Class.getDeclaredMethods(Native Method) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.ClassCache.getDeclaredPublicMethods(ClassCache.java:166) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.ClassCache.getDeclaredMethods(ClassCache.java:179) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.ClassCache.findAllMethods(ClassCache.java:249) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.ClassCache.getFullListOfMethods(ClassCache.java:223) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.ClassCache.getAllPublicMethods(ClassCache.java:204) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at java.lang.Class.getMethods(Class.java:1038) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at org.restlet.engine.resource.AnnotationUtils.addAnnotations(AnnotationUtils.java:131) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at org.restlet.engine.resource.AnnotationUtils.getAnnotations(AnnotationUtils.java:231) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at org.restlet.resource.ClientResource.wrap(ClientResource.java:1541) 
05-10 20:40:56.272: ERROR/AndroidRuntime(435):  at se.myapp.android.MyAppAndroid.onCreate(MyAppAndroid.java:61) 
... 

接口看起來像

public interface IRestletResource 
{ 
    @Get 
    public MyData[] getDatas(); 
} 

Serversid ËRestletResource看起來是這樣的:

public class RestletResource extends ServerResource implements IRestletResource 
{ 
    MyData[] m_Datas; 

    @Override 
    protected void doInit() throws ResourceException 
    { 
     m_Datas = new MyData("carl",32); 
    } 

    @Get 
    public MyData[] getDatas() 
    { 
     return m_Datas; //return new myData("..",1); still crashes. 
    } 
} 

邁德特看起來是這樣的:

public class MyData implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    private String m_Name; 
    private int  m_Age; 

    public MyData() 
    { 

    } 

    public MyData(String n, int a) 
    { 
     m_Name = n; 
     m_Age = a; 
    } 
    //... 
} 

現在。 它不會崩潰,如果我更改資源返回一個字符串,而不是MyData []。 如果我返回一個MyData實例而不是一個數組,它仍會崩潰。

回答

1

原來你需要

Engine.getInstance().getRegisteredConverters().add(new JacksonConverter()); 

在客戶端,爲藏漢

getConnectorService().getClientProtocols().add(Protocol.FILE); 
在你的srver側應用

..