如何使用HttpURLConnection在Android的url末尾添加json数组?

时间:2016-04-18 12:46:23

标签: java android json gson httpurlconnection

最近在一个项目中,我不得不面对来自我的同事的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。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试编码其他参数:

URLEncoder.encode(additionalInformation)