Java URI中的IllegalArgumentException

时间:2012-08-09 11:04:19

标签: java android url

我想创建像这样的HttpPost请求:

http://site/searches.json -d"search[params_attributes[origin_name]=MOW"\ -d"search[params_attributes][destination_name]=IEV"\ -d"search[params_attributes[some]=SOME"

我亲手试过 - 工作正常。 但我有错误:

Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 43:  http://somesite/searches.json -d"search[params_attributes][origin_name]=KBP"...
at java.net.URI.create(URI.java:776)
at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79)

它说错误在第一个空间位置。 有什么想法吗?

编辑:

我试过了:

mMethodURI = URLEncoder.encode(mMethodURI, "UTF-8");

得到:

Caused by: java.lang.IllegalStateException: Target host must not be null, or set in parameters.
at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:572)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

1 个答案:

答案 0 :(得分:0)

尝试使用

    URLEncoder.encode(url);
    URLDecoder.decode(url);

对您的网址进行编码和解码。

尝试使用以下代码,并确保在清单文件中设置所有权限。

public String executeUrl(String url, Context context) 
{
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    HttpResponse httpResponse;
    String result = null;

    try
    {
        httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        if(httpEntity != null)
        {
            InputStream inputStream = httpEntity.getContent();
            result = Parser.convertStreamToString(inputStream);
            inputStream.close();
        }
    }
    catch(UnknownHostException eUnknownHostException) 
    {
        eUnknownHostException.printStackTrace();
        result = null;
    }
    catch(ConnectTimeoutException eConnectTimeoutException) 
    {
        // TODO: handle exception
    }
    catch(Exception exception)
    {
        exception.printStackTrace();
        result = null;
    }
    return result;
}



private String convertStreamToString(InputStream ipStream)
{
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(ipStream), 8192);
    StringBuilder stringBuilder = new StringBuilder();
    String line = null;
    try
    {
        while((line = bufferedReader.readLine()) != null)
        {
            stringBuilder.append(line + "\n"); 
        }
    }
    catch(IOException ioException)
    {
        ioException.printStackTrace();
    }
    finally
    {
        try
        {
            ipStream.close();
        }
        catch(IOException ioException)
        {
            ioException.printStackTrace();
        }
    }

    return stringBuilder.toString();
}