wto*_*ett 2 java url android json
我有一个Android应用程序,我试图使用HTTPGet将一些数据传递给Web服务.如果我只是使用JSONArray.toString()方法构造字符串,我最终得到的URL类似于以下内容:
http://xxx.xx.xxx.xx/api?method=upload&args[deviceID]=123456789&args[data]=["{element1=93295352, element2=235235, element3=3523523}","{element1=93295352, element2=235235, element3=3523523}"]
Run Code Online (Sandbox Code Playgroud)
由于URL中的空格和引号,这不起作用.如果我擅自做以下事情:
JSONArray ja = new JSONArray();
// Add Data to JSONArray
String s = ja.toString();
// Add array to StringBuilder url
HTTPGet httpget = new HTTPGet(UrlEncoder.encode(url.toString()));
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,因为整个URL被编码并最终结果如下:
http%3A%2F%2Fxxx.xx.xxx.xx%2Fapi%3Fmethod%3Dupload%26args%5BdeviceID%5D%3D123456879%26args%5Bdata%5D%3D%5B%22%7Belement1%3D915156028000%2C+element2%3D1651651%2C+element3%3D489461%7D%22%2C%22
Run Code Online (Sandbox Code Playgroud)
显然,这不是我正在寻找的,并且必须有一个更好的解决方案,而不是搜索/替换该URL的JSONArray部分中的所有必要字符,尽管我认为这样做不会是一个巨大的麻烦,因为我只担心引用和空格字符.
请注意,手动将其粘贴到我的浏览器中会返回我期望的结果:
http://xxx.xx.xxx.xx/api?method=upload&args[deviceID]=123456789&args[data]=[%22{element1=915156028000,%20element2=0.0,%20element3=2.297444}%22,%22{element1=915156055000,%20element2=0.0,%20element3=2.2974419999999998}%22]
Run Code Online (Sandbox Code Playgroud)
你需要URL编码只查询参数值 ; 例如
JSONArray ja = new JSONArray();
// Add Data to JSONArray
String s = UrlEncoder.encode(ja.toString());
// Add string to StringBuilder url
HTTPGet httpget = new HTTPGet(url.toString());
Run Code Online (Sandbox Code Playgroud)
您需要注意的另一件事是URL的长度存在实际限制.这些限制因实现而异(浏览器,服务器,代理,HTTP客户端库等).在某些情况下,它低至2k字节,IIRC.
跟进
如果我想用POST做同样的事情,我最终是否必须以相同的方式对数据进行编码?
这取决于.
+字符.)当然,使用POST数据的一个优点是通常不会限制您可以发送的参数的大小.
| 归档时间: |
|
| 查看次数: |
17858 次 |
| 最近记录: |