Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 标准网络请求_Java_Android_Standards_Httpurlconnection - Fatal编程技术网

Java 标准网络请求

Java 标准网络请求,java,android,standards,httpurlconnection,Java,Android,Standards,Httpurlconnection,我想知道是否有一种通用的方式可以使用Java/Android进行网络呼叫,因为我正在努力解决我目前的策略。我目前正在尝试: public static File synchronousConnection(String url, String requestMethod, byte[] requestData, Map<String, String> headers) { File returnData = null; try { URL ur

我想知道是否有一种通用的方式可以使用Java/Android进行网络呼叫,因为我正在努力解决我目前的策略。我目前正在尝试:

public static File synchronousConnection(String url, String requestMethod, byte[] requestData, Map<String, String> headers)
{
    File returnData = null;
    try
    {
        URL url = new URL(url);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestMethod(requestMethod);
        if(requestData != null && requestData.length > 0)connection.setRequestProperty("Content-Length", Integer.toString(requestData.length));
        if(headers != null)for(String key : headers.keySet())connection.setRequestProperty(key, headers.get(key));
        //connection.connect();

        if(requestData != null && requestData.length > 0)
        {
            DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.write(requestData);

            outputStream.flush();
            outputStream.close();
        }

        //String response = inputStreamToString(url.openStream());
        //System.out.println("Response: " + response);

        int statusCode = connection.getResponseCode();

        connection.disconnect();

        System.out.println("Status code: " + statusCode);

        //returnData = response;
    }
    catch(IOException e)
    {
        System.out.println("IO Exception in connections\n" + e.getLocalizedMessage());
        e.printStackTrace();
    }
    catch(Exception e)
    {
        System.out.println("Invalid information for network connection\n" + e.getLocalizedMessage());
        e.printStackTrace();
    }
    return returnData;
}
公共静态文件同步连接(字符串url、字符串requestMethod、字节[]requestData、映射头)
{
文件返回数据=null;
尝试
{
URL=新URL(URL);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(真);
connection.setRequestMethod(requestMethod);
if(requestData!=null&&requestData.length>0)connection.setRequestProperty(“Content-length”,Integer.toString(requestData.length));
if(headers!=null)(字符串键:headers.keySet())connection.setRequestProperty(键,headers.get(键));
//connection.connect();
if(requestData!=null&&requestData.length>0)
{
DataOutputStream outputStream=新的DataOutputStream(connection.getOutputStream());
outputStream.write(请求数据);
outputStream.flush();
outputStream.close();
}
//字符串响应=inputStreamToString(url.openStream());
//System.out.println(“响应:+Response”);
int statusCode=connection.getResponseCode();
连接断开();
System.out.println(“状态代码:“+statusCode”);
//返回数据=响应;
}
捕获(IOE异常)
{
System.out.println(“连接中的IO异常\n”+e.getLocalizedMessage());
e、 printStackTrace();
}
捕获(例外e)
{
System.out.println(“网络连接的无效信息\n”+e.getLocalizedMessage());
e、 printStackTrace();
}
返回数据;
}
我已经注释掉了相当多的组件,因为它们似乎干扰了流程或提出了问题,尽管它们在其他示例中。至于
inputStreamToString(InputStream)
,这是我按照它所说的去做的方法之一


给定函数的输入参数,是否有URL连接的通用方法?目前,我真的很难获得任何连接到工作和奇怪的是,必须做的事情在一个自定义的方式为每个请求。此外,我似乎无法从
POST
请求中获取任何响应数据,即使我的API确实返回了一个响应正文。

尝试使用此答案中提供的HttpRequest包装器:这简化了发出http请求的过程。@FoamyGuy看起来太棒了!然而,有没有一种发送PUT和DELETE的方法?@FoamyGuy另外,从外观上看,似乎没有一种真正的标准方式来执行网络呼叫,对吗?@RileyE:根据你的定义,“标准”网络请求/呼叫是什么?有很多网络协议和数据编码机制…你想做什么需要“标准”?@Squonk你是对的,有很多不同的协议和数据编码机制,但是,如果你看看我的示例方法,它甚至在到达请求之前就已经处理好了所有这些。我正在寻找一种方法,在参数存在所有差异的情况下调用服务器。我可以在iOS上轻松地做到这一点,我希望在Android上也能有类似的体验。