最近在一个项目中,我不得不面对来自我的同事的API,它使用GET方法接受URL中对象的JSON数组。
例如,对API的调用是
api.site.com/object/create/[{"id":1,"name":"Hello!"},{"id":2,"name":"World!"}]
此网址与Chrome完美配合,API会返回预期值,例如:[{"id":12501}]
但在Android中,处理的函数抛出了一个 的 java.net.SocketTimeoutException
代码如下:
public String makeMVCServiceCall(String url,Method method,String additionalInformation)
{
url=url+"/"+additionalInformation;
return makeServiceCall(url,method);
}
public String makeServiceCall(String url,Method method)
{
HttpURLConnection connection=null;
try
{
URL u=new URL(url);
connection=(HttpURLConnection)u.openConnection();
String m=method== Method.GET?"GET":method== Method.POST?"POST":null;
connection.setRequestMethod(m);
connection.setUseCaches(false);
connection.setAllowUserInteraction(false);
connection.setReadTimeout(READ_TIMEOUT);
connection.setConnectTimeout(CONNECT_TIMEOUT);
connection.connect();
int status=0;
String response=connection.getResponseMessage();
status=connection.getResponseCode();
switch (status)
{
case 200:
case 201:
BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder sb=new StringBuilder();
String line;
while((line=br.readLine())!=null)
{
sb.append(line+"\n");
}
br.close();
return sb.toString();
default:
return null;
}
}
catch (Exception e)
{
}
finally {
if(connection!=null)
try
{
connection.disconnect();
}
catch (Exception e)
{
}
}
return null;
}
超时为5秒,将它们更改为15秒没有任何区别。我认为在URL的末尾附加JSON对象是一种不好的做法,但我必须使用该API。
有什么建议吗?
答案 0 :(得分:0)
尝试编码其他参数:
URLEncoder.encode(additionalInformation)