2012-09-16 19 views
2

從Java客戶端發送一個變量到PHP的服務器我在Java和PHP 初學者,我上有2個部分的應用程序工作:通過JSON

Android客戶端(JAVA)都和PHP服務器。

我嘗試了許多可用的教程,並閱讀了有關用戶犯的錯誤,但未能成功!

這是我使用的教程之一: Java文件

package org.postandget; 

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.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Main extends Activity { 

TextView tv; 
String text; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    tv = (TextView)findViewById(R.id.textview); 
    text = ""; 

    try { 
     postData(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void postData() throws JSONException{ 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://10.0.2.2/ReceiveLocation.php"); 
    JSONObject json = new JSONObject(); 

    try { 
     // JSON data: 
     json.put("name", "Fahmi Rahman"); 
     json.put("position", "sysdev"); 

     JSONArray postjson=new JSONArray(); 
     postjson.put(json); 

     // Post the data: 
     httppost.setHeader("json",json.toString()); 
     httppost.getParams().setParameter("jsonpost",postjson); 

     // Execute HTTP Post Request 
     System.out.print(json); 
     HttpResponse response = httpclient.execute(httppost); 

     // for JSON: 
     if(response != null) 
     { 
      InputStream is = response.getEntity().getContent(); 

      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(); 
       } 
      } 
      text = sb.toString(); 
     } 

     tv.setText(text); 

    }catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 
} 
} 

這是PHP文件

<?php 
include('ConnectionFunctions.php'); 
Connection(); 

$json = $_POST['jsonpost']; 
echo "JSON: \n"; 
echo "--------------\n"; 
var_dump($json); 
echo "\n\n"; 

$data = json_decode($json); 
echo "Array: \n"; 
echo "--------------\n"; 
var_dump($data); 
echo "\n\n"; 

$name = $data->name; 
$pos = $data->position; 
echo "Result: \n"; 
echo "--------------\n"; 
echo "Name  : ".$name."\n Position : ".$pos; 
?> 

這是當我運行PHP時出現的錯誤

Notice: Undefined index: HTTP_JSON in C:\xampp\htdocs\ReceiveLocation.php on line 5 
    JSON: -------------- NULL Array: -------------- NULL 
    Notice: Trying to get property of non-object in C:\xampp\htdocs\ReceiveLocation.php on line 17 

    Notice: Trying to get property of non-object in C:\xampp\htdocs\ReceiveLocation.php on line 18 
    Result: -------------- Name : Position : 

回答

0

使用以下方式訪問JSON數據:

$json = $_POST['jsonpost']; 
+0

我應用了你的建議,除了改變位置路徑......它曾經工作過一次,但下一次它給了我相同的錯誤......可以幫助我! – user1494142

0

您試圖訪問你的PHP文件中的無效字段,它應該是

 $json = $_POST['jsonpost']; 

OR

 $json = $_REQUEST['jsonpost']; 

請記住從壞的輸入消毒在你的PHP數據文件如果你打算用數據做數據庫工作。也或許你的本地主機的路徑應該從

 HttpPost httppost = new HttpPost("http://127.0.0.1/ReceiveLocation.php"); 

改爲

 HttpPost httppost = new HttpPost("http://10.0.2.2/ReceiveLocation.php"); 

希望我幫助。

+0

該解決方案給我2模擬器上的錯誤,第一個錯誤是未定義的索引jsonpost第二個錯誤(顯示名稱和位置值的兩倍)是注意:嘗試獲取非對象的屬性感謝您的回覆 – user1494142

0

您的代碼存在問題,JSON數據僅添加到標頭,而不添加到HTTP請求的POST部分。

所以,當你輸出:

print_r(getallheaders()); 

$headers = getallheaders(); 

$json = json_decode($headers['json']); 

print_r($json); 

你應該看到您的數據。我現在沒有修復,但我正在努力。