Utilizzo di HttpClient e HttpPost in Android con parametri postali

Sto scrivendo codice per un'applicazione Android che dovrebbe assumere dati, comprenderlo come Json e inviarlo ad un server web, che a sua volta dovrebbe rispondere con json.

Utilizzando una richiesta GET funziona bene, ma per qualche motivo utilizzando POST tutti i dati sembrano get spogliati e il server non riceve nulla.

  • Questo è un ordine di prova, non ti verrà addebitato alcun costo
  • C'è un path simile al file: /// android_asset / che indica la directory delle applicazioni?
  • Utilizzare il sensore di orientamento per puntare verso una posizione specifica
  • L'editor di layout di Android Studio non è in grado di eseguire visualizzazioni personalizzate
  • Allarme non funziona in android?
  • Come get l'icona del file corrispondente in Android?
  • Ecco uno snippet del codice:

    HttpParams params = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(params, 5000); HttpConnectionParams.setSoTimeout(params, 5000); DefaultHttpClient httpClient = new DefaultHttpClient(params); BasicCookieStore cookieStore = new BasicCookieStore(); httpClient.setCookieStore(cookieStore); String uri = JSON_ADDRESS; String result = ""; String username = "user"; String apikey = "something"; String contentType = "application/json"; JSONObject jsonObj = new JSONObject(); try { jsonObj.put("username", username); jsonObj.put("apikey", apikey); } catch (JSONException e) { Log.e(TAG, "JSONException: " + e); } HttpPost httpPost = new HttpPost(uri); List<NameValuePair> postParams = new ArrayList<NameValuePair>(); postParams.add(new BasicNameValuePair("json", jsonObj.toString())); HttpGet httpGet = null; try { UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParams); entity.setContentEncoding(HTTP.UTF_8); entity.setContentType("application/json"); httpPost.setEntity(entity); httpPost.setHeader("Content-Type", contentType); httpPost.setHeader("Accept", contentType); } catch (UnsupportedEncodingException e) { Log.e(TAG, "UnsupportedEncodingException: " + e); } try { HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); if (httpEntity != null) { InputStream is = httpEntity.getContent(); result = StringUtils.convertStreamToString(is); Log.i(TAG, "Result: " + result); } } catch (ClientProtocolException e) { Log.e(TAG, "ClientProtocolException: " + e); } catch (IOException e) { Log.e(TAG, "IOException: " + e); } return result; 

    Penso di aver seguito le linee guida generali su come creare i parametri e postarli, ma a quanto pare non lo sono.

    Qualsiasi aiuto o indicatore di where posso trovare una soluzione, sono benvenuti a questo punto (dopo aver trascorso alcune ore senza rendersi conto che nessun dato postale fosse mai stato inviato). Il vero server sta eseguendo Wicket su Tomcat, ma ho anche provato su una semplice pagina PHP, senza alcuna differenza.

  • Eclipse JUNO non si avvia
  • Ottenere risultati dei luoghi vicini dalla posizione utente utilizzando API di Google Maps in Android
  • Ottieni l'elenco dei luoghi che circondano la posizione corrente dell'utente
  • Come avviare l'intenzione della mappa con un elemento di marcatore / overlay a determinata latitudine e longitudine?
  • Vista Elenco ottimizzato con l'elenco di oggetti 1k
  • Perché l'adb install <same-packagename-always-release> non è riuscito?
  • 3 Solutions collect form web for “Utilizzo di HttpClient e HttpPost in Android con parametri postali”

    hai provato a farlo senza l'object JSON e hai passato solo due pacchetti basicnamevaluepalu? anche, potrebbe avere qualcosa a che fare con le impostazioni dei server

    Aggiornamento: questo è un pezzo di codice che uso:

     InputStream is = null; ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("lastupdate", lastupdate)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(connection); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.d("HTTP", "HTTP: OK"); } catch (Exception e) { Log.e("HTTP", "Error in http connection " + e.toString()); } 

    In realtà è ansible inviarlo come JSON come segue:

     // Build the JSON object to pass parameters JSONObject jsonObj = new JSONObject(); jsonObj.put("username", username); jsonObj.put("apikey", apikey); // Create the POST object and add the parameters HttpPost httpPost = new HttpPost(url); StringEntity entity = new StringEntity(jsonObj.toString(), HTTP.UTF_8); entity.setContentType("application/json"); httpPost.setEntity(entity); HttpClient client = new DefaultHttpClient(); HttpResponse response = client.execute(httpPost); 

    Ho appena controllato e ho lo stesso codice e funziona perfettamente. L'unica differenza è come compongo la mia list per i params:

    Utilizzo un: ArrayList<BasicNameValuePair> params

    e riempirlo in questo modo:

      params.add(new BasicNameValuePair("apikey", apikey); 

    Non utilizzo alcun JSONObject per submit params ai servizi web.

    Hai l'obbligo di utilizzare il JSONObject?

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.