所以我是restlet的新手。我正在创建一个可以与 GAE 服务器通信的 Android 应用程序(使用 objectify DB)我做了这个非常好的教程来学习: http ://www.tutos-android.com/webservice-rest-android-appengine-restlet-objectify
它工作得很好,但做的很少。只有2种方法:
public interface UserControllerInterface {
@Put
void create(User user);
@Get
Container getAllUsers();
}
对于我的应用程序,它更复杂,所以我添加了更多方法:
public interface UserControllerInterface {
@Put
public void createUser(ObagooUser user);
@Put
public void createMessage(ObagooUser user, String message);
@Put
public void updateMessage(ObagooMessage message);
@Get
public List<ObagooUser> getAllUser();
@Get
public ObagooUser getUserById(String id);
@Get
public List<ObagooMessage> getAllMessage();
@Get
public List<ObagooMessage> getAllMessageFromSender(ObagooUser sender);
@Get
public ObagooMessage getFreeMessage(ObagooUser user);
}
这些方法中的每一个都在服务器端工作(我用 Junit 测试过)。
现在我正在编写 android 部分,但我遇到了问题。当我对 getAllMessage() 进行简单调用时,出现错误:
java.lang.IllegalArgumentException: id cannot be zero
at com.google.appengine.api.datastore.KeyFactory.createKey(KeyFactory.java:44)
at com.googlecode.objectify.ObjectifyFactory.typedKeyToRawKey(ObjectifyFactory.java:269)
at com.googlecode.objectify.impl.ObjectifyImpl.find(ObjectifyImpl.java:159)
at com.googlecode.objectify.impl.ObjectifyImpl.find(ObjectifyImpl.java:183)
at com.obagoo.dao.ObagooUserDAO.getUserById(ObagooUserDAO.java:43)
at com.obagoo.controller.ObagooController.getUserById(ObagooController.java:47)
它采用了错误的方法(getUserById)。
我在我的 getAllMessage 中设置了一个断点,它会进入,但它也会进入其他方法。
如果我多次测试,有时它会调用 createUser 或其他随机方法。
你看到我做错了吗?
添加 getAllMessage 代码:
public List<ObagooMessage> getAllMessage() {
// logger.debug("Getting all Obagoo Messages");
List<ObagooMessage> msg = new ArrayList<ObagooMessage>();
Objectify ofy = ObjectifyService.begin();
Query<ObagooMessage> q = ofy.query(ObagooMessage.class);
for (ObagooMessage u : q) {
msg.add(u);
}
return msg;
}