2013-02-20 65 views
4

我正在做一個Android程序,該程序應該將數據從平板電腦發送到PHP Web服務。用於發送JSON代碼:通過Post將JSON從Java發送到PHP

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的Web服務:

<?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的優秀人員可以幫助我解決這個問題,因爲他們對我遇到的其他任何問題都有幫助。

+0

爲什麼你會把HTTP頭中的json? – 2013-02-20 15:32:28

+0

我剛剛在互聯網上查看教程,因爲這是第一次做Web服務。 – plasmy 2013-02-20 15:36:35

+0

它真的應該是一個POST與JSON作爲...被張貼的東西:http://stackoverflow.com/questions/7181534/http-post-using-json-in-java – 2013-02-20 15:47:59

回答

5

從註釋部分看來,您只希望將JSON發送到您的PHP腳本。通常情況下,後後這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 
) 
+0

謝謝你,我做到了這一點,它現在像一個魅力工作! – plasmy 2013-02-21 17:15:20