5

Con il vecchio problema di Apache deprecato nell'API 22, finalmente mi sto occupando dell'aggiornamento della mia rete.Parametri di trasmissione con HttpURLConnection

L'utilizzo di openConnection() sembra piuttosto semplice. Tuttavia, non ho visto alcun buon esempio per inviare parametri con esso.

Come aggiornare questo codice?

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

Ora che NameValuePair e BasicNameValuePair sono anche deprecato.

MODIFICA: il mio codice lato server php non prevede parametri JSON e non è possibile eseguire tutto il cambio improvviso a causa di utenti esistenti, pertanto è consigliabile una risposta non JSON.

EDIT2: Ho solo bisogno di Android di destinazione 4.1+ al momento.

+0

se si vuole mantenere la versione minSdk, forse non è un problema di utilizzare metodi deprecati. –

+0

Bene, devo solo scegliere Android 4.1+ al momento, se esiste una soluzione che si adatta a tutti e non utilizza materiale deprecato, è quello che mi piacerebbe fare. Inoltre, io sono OCD, non mi piacciono le linee che passano attraverso il mio codice dicendomi che le cose sono deprecate .. – KickingLettuce

+0

Puoi usare annotazioni come '@ SuppressLint' o' @TargetApi (22) 'per usare la libreria più recente, e usare' @ suppresswarnings' per eliminare gli avvertimenti. Penso che non sarebbe una cattiva decisione. –

risposta

7

ho risolto in questo modo:

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

Qui è roba parametro:

 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

provare questo:
https://stackoverflow.com/a/29153585/4665516 se avete bisogno di maggiori informazioni, fammelo sapere. spero che aiuti!

+0

Sembra diretto. Ma il mio codice server 'php' non è configurato per gestire le risposte' JSON' (restituisce 'JSON' su Android ma non è rilevante qui). Non posso semplicemente iniziare a cambiare il modo in cui il mio codice server funziona senza rompere gli utenti esistenti. C'è una risposta non JSON? – KickingLettuce

+0

penso che sia possibile con le risposte xml .. –

+0

Beh, ho bisogno di usare qualsiasi cosa stavo usando prima. L'array POST di base credo? Suppongo, posso anche fare un controllo 'json' di qualche tipo sul lato server. – KickingLettuce