带有POST和不可变输出变量的HttpURLConnection上的FileNotFoundException

时间:2014-02-08 14:04:40

标签: java android httpsurlconnection

我正在尝试将一些数据发布到我的Android应用程序中的https网址,以获得json格式的响应。

我面临两个问题:

  

is = conn.getInputStream();

引发

  

java.io.FileNotFoundException

如果我对HttpsURLConnection做错了,我不会得到。

当我调试代码(使用eclipse)时出现了第二个问题;我在

之后设置了一个断点
  

conn.setDoOutput(真);

并且,在检查conn值时,我发现变量doOutput仍设置为false并输入GET


我的https POST方法如下,POSTData是一个扩展ArrayList<NameValuePair>的类

private static String httpsPOST(String urlString, POSTData postData,  List<HttpCookie> cookies) {

    String result = null;
    HttpsURLConnection conn = null;
    OutputStream os = null;
    InputStream is = null;

    try {
        URL url = new URL(urlString);
        conn = (HttpsURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setUseCaches (false);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        if(cookies != null)
            conn.setRequestProperty("Cookie",
                    TextUtils.join(";", cookies));

        os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(os, "UTF-8"));
        writer.write(postData.getPostData());
        writer.flush();
        writer.close();

        is = conn.getInputStream();
        BufferedReader r = new BufferedReader(
                new InputStreamReader(is));
        StringBuilder total = new StringBuilder(); 
        String line;
        while ((line = r.readLine()) != null) {
            total.append(line);
        }
        result = total.toString();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (os != null) {
            try {
                os.close();
            } catch (IOException e) {
            }
        }
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
            }
        }
        if (conn != null) {
            conn.disconnect();
        }
    }

    return result;
}

稍微更新:显然eclipse调试骗了我,在netbeans上运行和调试显示POST连接。错误似乎与我传递给网址的参数有关。

1 个答案:

答案 0 :(得分:1)

FileNotFoundException表示您发布到的URL不存在,或者无法映射到servlet。它是HTTP 404状态代码的结果。

如果不同意程序的行为,请不要担心调试器中的内容。如果确实未启用doOutput,则会获得输出流的异常。