gpt4 book ai didi

iOS 客户端尝试将所有字段设置为 null 的对象插入到本地主机上的端点

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:42 26 4
gpt4 key购买 nike

我刚开始为 Google App Engine 后端开发 iOS 客户端。我遇到了一个问题,我能够与后端通信但无法将新记录插入数据存储区。

这是后台的代码

@ApiMethod(name = "insertDCustomerRecord")
public DCustomerRecord insertDCustomerRecord(DCustomerRecord dcustomerrecord) {
EntityManager mgr = getEntityManager();
try {
//Object pass in is JSON format, convert to object instance
DCustomerRecord newRecord = new DCustomerRecord(dcustomerrecord.getNRIC(), dcustomerrecord.getContactNumber());
if (containsDCustomerRecord(newRecord)) {
throw new EntityExistsException("Object already exists");
}
mgr.persist(newRecord);
} finally {
mgr.close();
}
return dcustomerrecord;
}

这是ios客户端的代码

- (void) initView {
GRGServiceManager* manager = [GRGServiceManager getInstance];
GTLServiceDcustomerrecordendpoint* service = [manager getDCustomerRecordService];


GTLDcustomerrecordendpointDCustomerRecord* newRecord = [[GTLDcustomerrecordendpointDCustomerRecord alloc] init];
[newRecord setNric:@"1234567A"];
[newRecord setContactNumber:@"12344574"];
GTLQueryDcustomerrecordendpoint* query = [GTLQueryDcustomerrecordendpoint queryForInsertDCustomerRecordWithObject:newRecord];
[service executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLObject *object, NSError *error) {
NSLog(@"Inserted new object");
}];
}

这是实体类

@Entity
public class DCustomerRecord {

/**
* @description this is the primary key of the record, it is auto-generated
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key id;
public Key getId() {
return id;
}

/**
* @description this is to store the NRIC of the customer
*/
private String m_sNRIC;
public String getNRIC() {
if(m_sNRIC == null)
m_sNRIC = "";
return m_sNRIC;
}
public void setNRIC(String nric) {
m_sNRIC = new String(nric);
}

/**
* @description this is to store the contact number of the customer
*/
private String m_sContactNumber;
public String getContactNumber() {
if(m_sContactNumber == null)
m_sContactNumber = "";
return m_sContactNumber;
}
public void setContactNumber(String contact) {
m_sContactNumber = new String(contact);
}

/**
* @description this is to store the number of lucky draw chance this customer has
*/
private Integer m_nNumberOfLuckyDraw;
public int getNumberOfLuckyDraw() {
if(m_nNumberOfLuckyDraw == null)
m_nNumberOfLuckyDraw = 0;
return m_nNumberOfLuckyDraw;
}
public void setNumberOfLuckyDraw(int newNumber) {
m_nNumberOfLuckyDraw = new Integer(newNumber);
}

/**
* @description this is to store the number of passcode redemption this customer has made
*/
private Integer m_nNumberOfPasscodeRedemption;
public int getNumberOfPasscodeRedemption() {
if(m_nNumberOfPasscodeRedemption == null)
m_nNumberOfPasscodeRedemption = 0;
return m_nNumberOfPasscodeRedemption;
}
public void setNumberOfPasscodeRedemption(int newNumber) {
m_nNumberOfPasscodeRedemption = new Integer(newNumber);
}

/**
* @description this is to store the number of photo taken by this customer
*/
private Integer m_nNumberOfPhotoTaken;
public int getNumberOfPhotoTaken() {
if(m_nNumberOfPhotoTaken == null)
m_nNumberOfPhotoTaken = 0;
return m_nNumberOfPhotoTaken;
}
public void setNumberOfPhotoTaken(int newNumber) {
m_nNumberOfPhotoTaken = new Integer(newNumber);
}

/**
* @description this is to store the the time stamp in which the record is created
*/
private Long m_nDateCreated;
public long getDateCreated() {
if(m_nDateCreated == null)
m_nDateCreated = 0L;
return m_nDateCreated;
}
public void setDateCreated(long date) {
m_nDateCreated = new Long(date);
}

/**
* @description this is to store the time stamp is which the record last communicate with server
*/
private Long m_nLastUpdated;
public long getLastUpdated() {
if(m_nLastUpdated == null)
m_nLastUpdated = 0L;
return m_nLastUpdated;
}
public void setLastUpdated(long date) {
m_nLastUpdated = new Long(date);
}

/**
* @description the default constructor
* @param nric - NRIC of the customer
* @param contactNumber - the contact number of the customer
*/
public DCustomerRecord(String nric, String contactNumber) {
//Initialization
setNRIC(nric);
setContactNumber(contactNumber);
setNumberOfLuckyDraw(0);
setNumberOfPasscodeRedemption(0);
setNumberOfPhotoTaken(0);
setDateCreated(System.currentTimeMillis());
setLastUpdated(System.currentTimeMillis());
}
}

错误可能有帮助也可能没有帮助,但这是当我运行连接到后端服务器本地版本的 iOS 应用程序时 Eclipse 控制台中显示的内容。

Aug 16, 2014 7:51:23 PM com.google.api.server.spi.SystemService invokeServiceMethod
INFO: cause={0}
java.lang.NullPointerException
at org.datanucleus.api.jpa.JPAEntityManager.find(JPAEntityManager.java:318)
at org.datanucleus.api.jpa.JPAEntityManager.find(JPAEntityManager.java:256)
at com.grg.database.record.DCustomerRecordEndpoint.containsDCustomerRecord(DCustomerRecordEndpoint.java:170)
at com.grg.database.record.DCustomerRecordEndpoint.insertDCustomerRecord(DCustomerRecordEndpoint.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at 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)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

Aug 16, 2014 7:51:23 PM com.google.api.server.spi.SystemService invokeServiceMethod
SEVERE: null
java.lang.NullPointerException
at org.datanucleus.api.jpa.JPAEntityManager.find(JPAEntityManager.java:318)
at org.datanucleus.api.jpa.JPAEntityManager.find(JPAEntityManager.java:256)
at com.grg.database.record.DCustomerRecordEndpoint.containsDCustomerRecord(DCustomerRecordEndpoint.java:170)
at com.grg.database.record.DCustomerRecordEndpoint.insertDCustomerRecord(DCustomerRecordEndpoint.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:359)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:160)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:118)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:127)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at 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)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:490)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)

据我所知,该错误是由所有字段都设置为空的 dcustomerrecord 引起的,它被传递到后端服务器中的 insertDCustomerRecord 中。我试过调试服务器,我的假设似乎是正确的。

有没有人遇到过这个问题?任何人都可以帮助解决这个错误吗?我相信我可能在代码中遗漏了一些重要的东西,但我不确定从哪里开始。几天来我一直在谷歌上搜索这个问题,但没有运气。提前致谢!

最佳答案

我没有浪费时间尝试调试问题,而是使用 JSON 对象与 iOS 客户端通信,目前为止运行良好。这不是我在为 Android 和 iOS 开发时遇到的第一个端点库问题。 1 另一个问题是需要编辑端点,特别是插入和包含函数,因为在与 Android 客户端通信时自动生成的代码采用了错误的参数。由于 Google App Engine 不支持 Servlet 3.0,确保必须在 xml 文件的 Servlet-Path 中正确定义每个 servlet 也很麻烦。

在 Google 使他们的端点库“更智能”之前,我强烈建议使用 JSON 传递进行 Google App Engine 开发。

关于iOS 客户端尝试将所有字段设置为 null 的对象插入到本地主机上的端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25339926/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com