Отправить JSON с Java на PHP через Post

Я делаю программу для Android, которая должна отправлять данные с планшета на веб-службу PHP. Код для отправки JSON:

package com.example.shvalidation; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicHeader; import org.apache.http.protocol.HTTP; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; public class MainMenuScreen extends Activity { //JSON Variables JSONParser jsonParser = new JSONParser(); String pid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_menu_layout); new TestThread().execute(); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main_menu_layout, menu); return true; } public void PlantToDome(View view) { Intent intent = new Intent(this, SelectLocationScreen.class); startActivity(intent); } //Código del Web Service public class TestThread extends AsyncTask<Void, Void, Void> { ProgressDialog dialog; protected void onPreExecute() { dialog = ProgressDialog.show(MainMenuScreen.this, "Loading", "Loading data, please wait.."); } private String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } protected Void doInBackground(Void...args0) { try { HttpClient client = new DefaultHttpClient(); HttpResponse response; HttpPost post = new HttpPost("http://192.168.1.101:8080/GetBook.php"); JSONObject holder = new JSONObject(); JSONObject euid = new JSONObject(); euid.put("euid", 1); holder.accumulate("euids", euid); euid.put("euid", 2); holder.accumulate("euids", euid); post.setHeader("json", holder.toString()); StringEntity se = new StringEntity(holder.toString()); se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json")); post.setEntity(se); response = client.execute(post); if (response != null) { InputStream in = response.getEntity().getContent(); String a = convertStreamToString(in); Log.i("Read from Server", a); } } catch (Exception e) { Log.d("error", e.toString()); } return null; } protected void onPostExecute(Void unused) { dialog.dismiss(); } } } 

Веб-служба PHP:

 <?php ob_start(); var_dump(json_decode(file_get_contents('php://input'))); $out = ob_get_contents(); ob_end_clean(); $f = fopen('out.txt', 'w+'); fwrite($f, html_entity_decode($out)); fclose($f); ?> 

Я пробовал разные методы для получения JSON, но никто из них не работал для меня. Возможно, прекрасные люди StackOverflow могут помочь мне в этом, как и всегда, для каждой другой проблемы, которая у меня была.

Solutions Collecting From Web of "Отправить JSON с Java на PHP через Post"

Из раздела комментариев, похоже, вы хотите, чтобы JSON отправлялся на ваш PHP-скрипт. Обычно вы отправляете POST на PHP и извлекаете его:

 <?php print_r($_POST); $json_string = $_POST['message']; $json = json_decode($json_string); print_r($json); ?> 

А затем небольшой пример клиента:

 public static void main(String[] args) { String json = "{\"message\":\"This is a message\"}"; HttpClient httpClient = new DefaultHttpClient(); try { HttpPost request = new HttpPost("http://somesite.com/test.php"); StringEntity params =new StringEntity("message=" + json); request.addHeader("content-type", "application/x-www-form-urlencoded"); request.setEntity(params); HttpResponse response = httpClient.execute(request); // handle response here... System.out.println(org.apache.http.util.EntityUtils.toString(response.getEntity())); org.apache.http.util.EntityUtils.consume(response.getEntity()); } catch (Exception ex) { // handle exception here } finally { httpClient.getConnectionManager().shutdown(); } } 

Результатом этого является:

 Array ( [message] => {"message":"This is a message"} ) stdClass Object ( [message] => This is a message )