使用HttpURLConnection传递参数

问题描述:

在API 22中弃用旧的Apache东西,我终于开始更新我的网络资料。使用HttpURLConnection传递参数

使用openConnection()看起来非常简单。但是,我还没有看到任何好的例子来发送参数。

我该如何更新此代码?

 ArrayList<NameValuePair> param = new ArrayList<NameValuePair>(); 
     param.add(new BasicNameValuePair("user_id",String.valueOf(userId))); 
     httpPost.setEntity(new UrlEncodedFormEntity(param)); 

现在NameValuePairBasicNameValuePair也已过时。

编辑:我的服务器端php代码不期望JSON参数,我不能所有的突然切换,由于现有的用户 - 所以建议一个非JSON的答案。编辑2:我只需要目标Android 4.1 +目前。

+0

,也许它不是使用过时的方法问题。 – 2015-03-31 18:15:21

+0

那么我现在只需要针对Android 4.1+,如果有一种解决方案适合所有人,并且不使用弃用的东西,那就是我想要做的。此外,我是强迫症,我不喜欢通过我的代码告诉我的东西线已被弃用。 – KickingLettuce 2015-03-31 18:17:44

+0

您可以使用类似'@ SuppressLint'或'@TargetApi(22)'的注释来使用更新的库,并使用'@抑制警告“来清除警告。我认为这不是一个错误的决定。 – 2015-03-31 18:25:14

我固定它是这样的:

 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setDoOutput(true); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

下面是参数的东西:

如果你想保持minSdk版本
 String charset = "UTF-8"; 
     String s = "unit_type=" + URLEncoder.encode(MainActivity.distance_units, charset); 
     s += "&long=" + URLEncoder.encode(String.valueOf(MainActivity.mLongitude), charset); 
     s += "&lat=" + URLEncoder.encode(String.valueOf(MainActivity.mLatitude), charset); 
     s += "&user_id=" + URLEncoder.encode(String.valueOf(MyndQuest.userId), charset); 

     conn.setFixedLengthStreamingMode(s.getBytes().length); 
     PrintWriter out = new PrintWriter(conn.getOutputStream()); 
     out.print(s); 
     out.close(); 

试试这个:
https://stackoverflow.com/a/29153585/4665516 如果你需要更多的信息,请让我知道。 希望它有帮助!

+0

这似乎很直接。但是我的'php'服务器代码没有设置为处理'JSON'响应(它确实将'JSON'输出回Android,但在这里不相关)。我不能只是开始改变我的服务器代码的工作方式,而不会破坏现有用户。有没有JSON的答案? – KickingLettuce 2015-03-31 18:20:10

+0

我认为这是可能的XML响应.. – 2015-03-31 18:24:48

+0

嗯,我需要使用任何我以前使用的。基本的POST阵列的我猜?我想,我也可以在服务器端进行某种“json”检查。 – KickingLettuce 2015-03-31 18:30:04