Понимание HttpUrlConnection / Как добавить пары nameValue в HttpUrlConnection

Задний план

У меня есть следующие функции: оба делают то же самое, что и POST на php-странице:

private void parse(String myurl) throws IOException { java.util.Date date= new java.util.Date(); Timestamp timestamp = (new Timestamp(date.getTime())); try { JSONObject parameters = new JSONObject(); parameters.put("timestamp",timestamp); parameters.put("jsonArray", new JSONArray(Arrays.asList(makeJSON()))); parameters.put("type", "Android"); parameters.put("mail", mail); //System.out.println("PARAMS"+parameters.toString()); URL url = new URL(myurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // conn.setReadTimeout(10000 /* milliseconds */); // conn.setConnectTimeout(15000 /* milliseconds */); conn.setRequestProperty( "Content-Type", "application/json" ); conn.setDoOutput(true); conn.setRequestMethod("POST"); OutputStream out = new BufferedOutputStream(conn.getOutputStream()); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8")); writer.write(parameters.toString()); writer.close(); out.close(); int responseCode = conn.getResponseCode(); System.out.println("\nSending 'POST' request to URL : " + url); System.out.println("Response Code : " + responseCode); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); System.out.println(response.toString()); }catch (Exception exception) { System.out.println("Exception: "+exception); } } 

В приведенном выше примере я отправляю только одну строку на php-сервер по адресу:

 writer.write(parameters.toString()); 

Теперь у меня есть эта функция:

 InputStream ins = null; String result = null; public void postJSON(String url){ DefaultHttpClient http = new DefaultHttpClient(new BasicHttpParams()); HttpPost httppost = new HttpPost(url); httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-Type", "application/x-www-form-urlencoded"); try{ JSONArray json = (makeJSON()); // System.out.println("Arrays"+Arrays.asList(json).toString()); // System.out.println(("simple"+json)); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4); nameValuePairs.add(new BasicNameValuePair("timestamp", "t")); nameValuePairs.add(new BasicNameValuePair("mail", "t")); nameValuePairs.add(new BasicNameValuePair("type", "t")); nameValuePairs.add(new BasicNameValuePair("jsonArray", Arrays.asList(json).toString())); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse resp = http.execute(httppost); HttpEntity entity = resp.getEntity(); ins = entity.getContent(); BufferedReader bufread = new BufferedReader(new InputStreamReader(ins, "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String line = null; while((line = bufread.readLine()) != null){ sb.append(line +"\n"); } result = sb.toString(); System.out.println(result); /* if(result.equalsIgnoreCase("There is no update in database")){ }else{ // System.out.println(result); readAndParseJSON(result); } */ }catch (Exception e){ // System.out.println("Error: "+e); }finally{ try{ if(ins != null){ ins.close(); } }catch(Exception smash){ System.out.println("Squish: "+smash); } } // return result; } 

В приведенном выше я отправляю пары значений имени, которые я могу получить на стороне php на основе их имен.

Поскольку HttpUrlConnection – это предлагаемый способ для Android, как я могу изменить первую функцию, чтобы обслуживать пары значений имени. Я пробовал смотреть в Интернете, но это меня просто смущает.

Я тоже очень смущен этой строкой:

 conn.setRequestProperty( "Content-Type", "application/json" ); 

Что вы думаете выше?

и эти два:

 httppost.setHeader("Accept", "application/json"); httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");