Java 使用HttpURLConnection而不是HttpPost

Java 使用HttpURLConnection而不是HttpPost,java,android,http-post,httpurlconnection,Java,Android,Http Post,Httpurlconnection,我有一个用java编写的android应用程序代码。通过使用HttpPost和DefaultHttpClient库。目前,我正在对其进行重新编码,以将HttpPost和DefaultHttpClient库替换为HttpURLConnection,因为DefaultHttpClient已被删除。 我为我的一个项目做了这件事,它成功了 但是在当前的项目中,当使用HttpURLConnection而不是DefaultHttpClient时,我并没有从Web服务获得相同的响应。谁能帮我一下我哪里做错了

我有一个用java编写的android应用程序代码。通过使用HttpPost和DefaultHttpClient库。目前,我正在对其进行重新编码,以将HttpPost和DefaultHttpClient库替换为HttpURLConnection,因为DefaultHttpClient已被删除。 我为我的一个项目做了这件事,它成功了

但是在当前的项目中,当使用HttpURLConnection而不是DefaultHttpClient时,我并没有从Web服务获得相同的响应。谁能帮我一下我哪里做错了

以下是旧代码:

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
String postParameter = "Param1=" + Value1 + "&Param2="+ Value2+ "&Param3="+Value3;
try {
 httpPost.setEntity(new StringEntity(postParameter));
} catch (Exception e) {
 e.printStackTrace();
}
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);
这是我的新代码

_Url = new URL(Url);
HttpURLConnection urlconnection = (HttpURLConnection) _Url.openConnection();
urlconnection.setRequestMethod(Type);
urlconnection.setConnectTimeout(Timeout);
urlconnection.setUseCaches(false);
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
 String postParameter = "Param1=" + Value1 + "&Param2="+ Value2+ "&Param3="+Value3;
BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os));
writer.write(postParameter);
writer.flush();
writer.close();
os.close();
urlconnection.connect();
代码正在运行,没有任何错误,但Web服务给出的响应与它对旧代码给出的响应不同。

试试这个

List nameValuePairs = new ArrayList(3);
            nameValuePairs.add(new BasicNameValuePair("Param1", value1));
            nameValuePairs.add(new BasicNameValuePair("Param2", value2));
            nameValuePairs.add(new BasicNameValuePair("Param3", value3));

            UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs);

OutputStream post = request.getOutputStream();
            entity.writeTo(post);
            post.flush();

您没有获得输入流,请尝试下面的代码

         try {

                String postParameter = "Param1=" + Value1 + "&Param2="+ Value2+ "&Param3="+Value3;
                URL url = new URL(UrlStr);
                HttpURLConnection urlConnection = (HttpURLConnection) url
                        .openConnection();
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Accept",
                        "application/json");
                urlConnection.setRequestProperty("Content-Type",
                        "application/json");// setting your headers its a json in my case set your appropriate header

                urlConnection.setDoOutput(true);
                urlConnection.connect();// setting your connection

                OutputStream os = null;
                os = new BufferedOutputStream(
                urlConnection.getOutputStream());
                os.write(postParameter.toString().getBytes());
                os.flush();// writing your data which you post


                StringBuffer buffer = new StringBuffer();
                InputStream is = urlConnection.getInputStream();
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(is));
                String line = null;
                while ((line = br.readLine()) != null)
                    buffer.append(line + "\r\n");
                     // reading your response 

                is.close();
                urlConnection.disconnect();// close your connection
                return buffer.toString();

            } catch (Exception e) {
            }

尝试过,但得到了与我的代码相同的响应:(您是否从服务器收到任何响应??状态代码等??是的,我收到的响应与您的代码相同,我收到的响应与我的新代码相同,服务器的响应错误。但是原始代码得到的是正确的。httpPost的setEntity方法对参数做了一些与写入outputstream不同的处理??抱歉,我没有在这里用我的问题编写获取inputstream的代码,但我已经在我的应用程序中编写了。我认为问题不在于inputstream。问题在于实体和outputstream。httpPost使用了setEntity方法,而我使用了outputstream和openconnection。我认为setEntity方法对参数做了一些不同的处理与写入OutputStream相比,您的requestmethod是什么?urlconnection.setRequestMethod(Type);只需尝试上面的代码,看看您得到了什么样的响应代码?