Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中使用HttpURLConnection类向web服务发送JSON对象?_Java_Android_Web Services_Resteasy - Fatal编程技术网

Java 如何在Android中使用HttpURLConnection类向web服务发送JSON对象?

Java 如何在Android中使用HttpURLConnection类向web服务发送JSON对象?,java,android,web-services,resteasy,Java,Android,Web Services,Resteasy,我使用RESTEasy API开发了RESTWeb服务,它接受Json对象并进行一些处理。我为此编写了两个客户端,一个Android客户端和一个普通Java程序客户端。除了连接部件外,这两个部件的功能基本相同 我在Java客户端中使用RESTEasy连接API,在Android应用程序中使用HttpURLConnection,因为它是推荐的(而不是旧的ApacheHttpClient) Java客户端中的一切都很好,但Android应用程序却不一样。当我运行Android客户端时,我得到一个异常

我使用RESTEasy API开发了RESTWeb服务,它接受Json对象并进行一些处理。我为此编写了两个客户端,一个Android客户端和一个普通Java程序客户端。除了连接部件外,这两个部件的功能基本相同

我在Java客户端中使用RESTEasy连接API,在Android应用程序中使用HttpURLConnection,因为它是推荐的(而不是旧的ApacheHttpClient)

Java客户端中的一切都很好,但Android应用程序却不一样。当我运行Android客户端时,我得到一个异常“com.fasterxml.jackson.core.jsonparseexception:输入意外结束”

我不明白出了什么问题,所以我尝试了一些使用Chrome高级Rest客户端的调试测试,以检查Web服务是否一切正常。因此,我从两个客户端获取了Json字符串的副本,并作为对web服务的POST请求执行,它工作得非常好

在做了更多的测试之后,我假设这是因为HttpURLConnection使用OutputStream来写入数据,它将二进制流发送到端点,而web服务无法正确读取web服务。这就是我所能想到的。(我用JasonInt工具测试了Json字符串,它们都是有效的。)

有人能解释一下我做错了什么,或者如何使用HttpURLConnection正确调用web服务吗?提前谢谢

Web服务代码

错误的堆栈跟踪


您是否在rest客户端(post-man)上测试过api,似乎您的远程服务器出现了问题。

我没有使用OutputStreamWriter,而是使用OutputStream并使用UTF-8字符集对字节进行编码

OutputStream os= con.getOutputStream();
os.write(jsonString.getBytes("UTF-8"));
os.flush;
os.close;

最好在客户端对图像(Base 64)进行编码,然后将其作为
json
发送到
服务器
。在服务器端,您应该解码并制作一个文件以供进一步处理…@VikrantKashyap是的,我已经这样做了,我刚刚输入了执行实际连接部分的代码,因为我认为这就是问题所在。只需一分钟,我就将此问题重定向到我的一位专家朋友。他一定会帮你的。谢谢是的,正如我在问题中提到的,我用ARC测试了服务。它工作得很好。而且还在工作。
try {
                      Log.e("Upload", "Making connection");
                      String url= "http://192.168.43.2:8080/RestEasyWS/rest/upload/jsonString";
                      URL urlObj = new URL(url);
                      Log.e("Upload", "Opening tunnel");
                      HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
                      Log.e("Upload", "Tunnel Opened");
                      con.setDoInput(true);
                      con.setDoOutput(true);
                      con.setChunkedStreamingMode(0);
                      con.setRequestProperty("Content-Type", "application/json");
                      con.setRequestProperty("Accept", "application/json");
                      con.setRequestProperty("Accept-Encoding","gzip, deflate");
                      con.setRequestProperty("Accept-Language","en-US,en;q=0.8");
                      con.setRequestMethod("POST");
                      Log.e("Upload", "Connection Made");
                      OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream());

                      Log.e("Upload", "Uploading...");
                      osw.write(jsonString);
                      Log.e("Upload", "Uploaded...");

                      Log.e("Upload", "Server Response : " + con.getResponseCode() + " - " + con.getResponseMessage() );

                      osw.flush();
                      osw.close();

                  } catch (IOException e) {
                      Log.e("Connection", "Error In Opening a Connection");
                      e.printStackTrace();
                  }
Mar 16, 2016 12:16:00 PM org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher processApplication
INFO: RESTEASY002225: Deploying javax.ws.rs.core.Application: class com.informatics.webservice.MessageApplication
Mar 16, 2016 12:16:00 PM org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher processApplication
INFO: RESTEASY002220: Adding singleton resource com.informatics.webservice.imagetransfer.ImageTransferHandler from Application class com.informatics.webservice.MessageApplication
Mar 16, 2016 12:16:04 PM org.jboss.resteasy.core.ExceptionHandler handleFailure
ERROR: RESTEASY002005: Failed executing POST /upload/jsonString
org.jboss.resteasy.spi.ReaderException: com.fasterxml.jackson.databind.JsonMappingException: Unexpected end-of-input in VALUE_STRING
at [Source: org.apache.catalina.connector.CoyoteInputStream@9ceeccd; line: 1, column: 7236430]
at [Source: org.apache.catalina.connector.CoyoteInputStream@9ceeccd; line: 1, column: 23] (through reference chain: com.informatics.webservice.commonobjects.ImageData["encodedImageString"])
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:184)
at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:91)
at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:114)
at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)
at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:395)
at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:202)
at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected end-of-input in VALUE_STRING
at [Source: org.apache.catalina.connector.CoyoteInputStream@9ceeccd; line: 1, column: 7236430]
at [Source: org.apache.catalina.connector.CoyoteInputStream@9ceeccd; line: 1, column: 23] (through reference chain: com.informatics.webservice.commonobjects.ImageData["encodedImageString"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:339)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:299)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1511)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:262)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
at com.fasterxml.jackson.databind.ObjectReader._bind(ObjectReader.java:1534)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:944)
at org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider.readFrom(ResteasyJackson2Provider.java:121)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:61)
at org.jboss.resteasy.core.interception.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:60)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:53)
at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.aroundReadFrom(GZIPDecodingInterceptor.java:59)
at org.jboss.resteasy.core.interception.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:55)
at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:151)
... 30 more
OutputStream os= con.getOutputStream();
os.write(jsonString.getBytes("UTF-8"));
os.flush;
os.close;