我正在尝试编写一个具有事件实体的简单应用程序。
通过自动生成的端点 API 将事件实体添加到云中,以及通过它的 id 检索事件。问题是当我尝试更新事件时。eventInCloud 与我使用数据存储查看器看到的相同。我将另一个元素添加到它的名为 Participants 的字符串列表中,并尝试在数据存储中更新它。这是代码:
try {
Event eventInCloud = endpoint.getEvent(eventLocal.getId()).execute();
eventInCloud.getParticipants().add("coolman@gmail.com");
endpoint.updateEvent(eventInCloud).execute();
} catch (IOException e) {
e.printStackTrace();
}
我在 Eclipse 中看到的错误消息是:
06-30 18:53:07.415: W/System.err(3448): com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 服务不可用 06-30 18:53:07.415: W/System.err( 3448):{ 06-30 18:53:07.415:W/System.err(3448):“代码”:503、06-30 18:53:07.415:W/System.err(3448):“错误”: [ { 06-30 18:53:07.415:W/System.err(3448):“域”:“全局”,06-30 18:53:07.415:W/System.err(3448):“消息”: “java.lang.NullPointerException”,06-30 18:53:07.415:W/System.err(3448):“原因”:“backendError”06-30 18:53:07.415:W/System.err(3448) : } ],06-30 18:53:07.415:W/System.err(3448):“消息”:“java.lang.NullPointerException”06-30 18:53:07.415:W/System.err(3448) : } 06-30 18:53:07.415: W/System.err(3448): at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:111) 06-30 18:53:07.415: W/System.err(3448): at com.google.api.client.googleapis .services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:38) 06-30 18:53:07.415: W/System.err(3448): 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse (AbstractGoogleClientRequest.java:312) 06-30 18:53:07.415: W/System.err(3448): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1042) 06-30 18 :53:07.415: W/System.err(3448): 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 06-30 18:53:07.415: W/System。错误(3448):在 com.google.api。client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 06-30 18:53:07.415: W/System.err(3448): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute (AbstractGoogleClientRequest.java:460) 06-30 18:53:07.415: W/System.err(3448): at com.evman.model.Events.updateEventInCloud(Events.java:83) 06-30 18:53:07.415 : W/System.err(3448): 在 com.evman.model.Events.access$1(Events.java:69) 06-30 18:53:07.415: W/System.err(3448): 在 com.evman .model.Events$UpdateEventTask.doInBackground(Events.java:107) 06-30 18:53:07.415: W/System.err(3448): at com.evman.model.Events$UpdateEventTask.doInBackground(Events.java: 1) 06-30 18:53:07.415: W/System.err(3448): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 06-30 18:53:07.415: W/System.err (3448):在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 06-30 18:53:07.415: W/System.err(3448): 在 android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java :230) 06-30 18:53:07.415: W/System.err(3448): 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 06-30 18:53:07.415: W/System .err(3448):在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 06-30 18:53:07.415:W/System.err(3448):在 java.lang.Thread。运行(线程.java:856)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 06-30 18:53:07.415: W/System.err(3448): 在 java.lang.Thread.run(Thread.java:第856章)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 06-30 18:53:07.415: W/System.err(3448): 在 java.lang.Thread.run(Thread.java:第856章)
我在服务器端得到的错误是这样的:
com.google.api.server.spi.SystemService invokeServiceMethod: null java.lang.NullPointerException at com.google.appengine.api.datastore.KeyTranslator.convertToPb(KeyTranslator.java:49) at com.google.appengine.api.datastore .AsyncDatastoreServiceImpl.doBatchGetBySize(AsyncDatastoreServiceImpl.java:316) 在 com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.get(AsyncDatastoreServiceImpl.java:280) 在 com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl. java:68) 在 com.google.appengine.api.datastore.DatastoreServiceImpl$1.runInternal(DatastoreServiceImpl.java:65) 在 com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:29) 在 com. google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:65) com.google.appengine.api.datastore.DatastoreServiceImpl.get(DatastoreServiceImpl.java:55) com.google.appengine.datanucleus.WrappedDatastoreService.get(WrappedDatastoreService.java:60) com.google.appengine.datanucleus .EntityUtils.getEntityFromDatastore(EntityUtils.java:665) 在 com.google.appengine.datanucleus.DatastorePersistenceHandler.fetchObject(DatastorePersistenceHandler.java:543) 在 org.datanucleus.state.JDOStateManager.loadFieldsFromDatastore(JDOStateManager.java:1638) 在 org. datanucleus.state.JDOStateManager.loadUnloadedFieldsInFetchPlan(JDOStateManager.java:1363) at org.datanucleus.state.JDOStateManager.detach(JDOStateManager.java:2718) at org.datanucleus.ObjectManagerImpl.performDetachOnCloseWork(ObjectManagerImpl.java:4571) at org.datanucleus .ObjectManagerImpl。performDetachOnClose(ObjectManagerImpl.java:4534) at org.datanucleus.ObjectManagerImpl.close(ObjectManagerImpl.java:1105) at org.datanucleus.api.jpa.JPAEntityManager.close(JPAEntityManager.java:193) at com.evman.eventmanager.EventEndpoint .containsEvent(EventEndpoint.java:165) 在 com.evman.eventmanager.EventEndpoint.updateEvent(EventEndpoint.java:123) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:45) 在 com.google.api.server.spi.SystemService.invokeServiceMethod( SystemService.java:320) 在 com.google.api.server.spi.SystemServiceServlet。在 com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:80) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet 执行(SystemServiceServlet.java:122) .http.HttpServlet.service(HttpServlet.java:717) 在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java :1166) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay。 jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 在 org.mortbay。jetty.servlet.ServletHandler.handle(ServletHandler.java:388) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java: 182) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 在 org.mortbay.jetty.handler.HandlerWrapper .handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java:326) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 在 org.mortbay.jetty。 httpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 在 com.google.tracing.TraceContext$TraceContextRunnable。runInContext(TraceContext.java:483) 在 com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:490) 在 com.google.tracing.TraceContext.runInContext(TraceContext.java:777) 在 com.google。 tracking.TraceContext$DoInTraceContext.runInContext(TraceContext.java:754) 在 com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:345) 在 com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java: 337) 在 com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) 在 java.lang.Thread.run(Thread.java:722)第 777 章.runInInheritedContext(TraceContext.java:337) 在 com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) 在 java.lang.Thread.run(Thread.java:722)第 777 章.runInInheritedContext(TraceContext.java:337) 在 com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:487) 在 java.lang.Thread.run(Thread.java:722)TraceContext$TraceContextRunnable.run(TraceContext.java:487) at java.lang.Thread.run(Thread.java:722)TraceContext$TraceContextRunnable.run(TraceContext.java:487) at java.lang.Thread.run(Thread.java:722)
生成的后端代码是:
@ApiMethod(name = "updateEvent")
public Event updateEvent(Event event) {
EntityManager mgr = getEntityManager();
try {
if (!containsEvent(event)) {
throw new EntityNotFoundException("Object does not exist");
}
mgr.persist(event);
} finally {
mgr.close();
}
return event;
}
private boolean containsEvent(Event event) {
EntityManager mgr = getEntityManager();
boolean contains = true;
try {
// added the following if for the first time when i add the entity
if(event.getKey()==null){
return false;
}
Event item = mgr.find(Event.class, event.getKey());
if (item == null) {
contains = false;
}
} finally {
mgr.close();
}
return contains;
}
任何帮助将不胜感激!