2011-09-19 78 views
0

我正在使用Google Places API並嘗試發送POST請求以添加新位置。但我一直在的request.execute()部分。在HttpRequest上獲取NullPointerException execute()將POST請求發送到Google Places API

// Create POST body. 
GenericData data = new GenericData(); 
GenericData coordinates = new GenericData(); 
coordinates.put("lat", latitude); 
coordinates.put("lng", longitude); 
data.put("location", coordinates); 
data.put("accuracy", 50); 
data.put("name", name); 
JsonHttpContent content = new JsonHttpContent(); 
content.data = data; 

// Send POST request. 
HttpRequestFactory httpRequestFactory = LocationUtil.createRequestFactory(transport); 
HttpRequest request = httpRequestFactory.buildPostRequest(new GenericUrl(GooglePlacesConsts.PLACES_REPORT_ADD_URL), content); 
request.url.put("sensor", "false"); 
request.url.put("key", GooglePlacesConsts.API_KEY); 
HttpResponse response = request.execute(); 

createRequestFactory()的代碼是(這是從Davy's Tech Blog):

public static HttpRequestFactory createRequestFactory(final HttpTransport transport) { 
    return transport.createRequestFactory(new HttpRequestInitializer() { 
     public void initialize(HttpRequest request) { 
      GoogleHeaders headers = new GoogleHeaders(); 
      headers.setApplicationName("App Name"); 
      request.headers = headers; 
      JsonHttpParser parser = new JsonHttpParser(); 
      parser.jsonFactory = new JacksonFactory(); 
      request.addParser(parser); 
     } 
    }); 
} 

代碼是否錯了?我有點借用了不同來源的代碼行,因爲我不知道如何正確地發送Java中的POST請求。主要是,我遵循Davy's Tech Blog的教程,但也試圖遵循this post,因爲前面的鏈接僅提供了用於發送GET請求的示例,並且需要發送POST請求。

順便說一句,這是堆棧跟蹤:

javax.faces.FacesException: #{locationBean.actionAdd}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:349) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) 
    ... 22 more 
Caused by: java.lang.NullPointerException 
    at com.google.api.client.http.json.JsonHttpContent.writeTo(JsonHttpContent.java:75) 
    at com.google.api.client.http.apache.ContentEntity.writeTo(ContentEntity.java:56) 
    at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:101) 
    at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:107) 
    at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:127) 
    at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:253) 
    at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:218) 
    at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:249) 
    at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:124) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:483) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554) 
    at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:58) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:361) 
    at model.location.LocationBean.actionAdd(LocationBean.java:57) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.apache.el.parser.AstValue.invoke(AstValue.java:191) 
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) 
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) 
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) 
    ... 23 more 

謝謝!

回答

1

我很努力地找到該類的行號有效的例外,但我發現1.4.1-beta

public void writeTo(OutputStream out) throws IOException { 
    JsonGenerator generator = jsonFactory.createJsonGenerator(out, JsonEncoding.UTF8); 
    generator.serialize(data); 
    generator.flush(); 
} 

45是該方法的第一行。因此請檢查jsonFactory是不是null

+0

感謝您的回覆!對不起,我應該包含該版本。對不起,如果這是一個愚蠢的問題,但我如何檢查'jsonFactory'是否爲空,一旦我知道如何糾正它?它不是原始Google代碼的一部分嗎?或者你的意思是我編輯他們的實際代碼?謝謝! – Jill

+0

@Jill - 你需要閱讀代碼,弄清楚爲什麼'jsonFactory'沒有得到初始化,並解決這個問題。這個問題有99.9%可能是因爲你錯過了剪切粘貼代碼中的某個步驟。 –

+0

我假設這個字段從null開始,所以你必須創建一個JsonFactory並設置它。從我能看到的內容中可以看到2個impls:http://code.google.com/p/google-api-java-client/source/browse/google-api-client/src/main/java/com/google/ api/client/json/jackson/JacksonFactory.java?name = 1.4.1-beta和http://code.google.com/p/google-api-java-client/source/browse/google-api-client/的src/main/JAVA/COM /谷歌/ API /客戶/ JSON/GSON/GsonFactory.java?名稱= 1.4.1-β。無論是爲了工作,你還需要下載Jackson或GSON。 –