5

在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

回答

7

我固定它是這樣的:

 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(); 
1

試試這個:
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