2015-10-17 69 views
0

我们正在做一个项目学校,我们有一些从我们的Android应用程序发送数据到我们的PHP控制器的问题。从Android应用程序发送数据到PHP与JSON不起作用

首先:

这里是代码:所有的 首先,我国几乎AddScoreActivity

public static String POST(String url,ScoreData score){ 
    InputStream inputStream = null; 
    String result = ""; 
    try{ 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     String json = ""; 

     JSONObject jsonObject = new JSONObject(); 
     jsonObject.accumulate("Totaal", score.getTotaleScore()); 
     jsonObject.accumulate("Strikes",score.getAantalStrikes()); 
     jsonObject.accumulate("Spare",score.getAantalSpares()); 
     jsonObject.accumulate("Game_ID",3); 
     jsonObject.accumulate("Google_ID",3); 

     json = jsonObject.toString(); 
     StringEntity se = new StringEntity(json); 
     httpPost.setEntity(se); 

     httpPost.setHeader("Accept","application/json"); 
     httpPost.setHeader("Content-type","application/json"); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     inputStream = httpResponse.getEntity().getContent(); 

     if(inputStream != null) 
     { 
      result = convertInputStreamToString(inputStream); 
     } 
     else 
     { 
      result = "Did not work!"; 
     } 
    } 
    catch(Exception e) 
    { 
     Log.d("Inputstream", e.getLocalizedMessage()); 

    } 

    return result; 

} 

@覆盖 公共无效的onClick(查看视图){

的完整代码
TotaleScore = editTotaleScore.getText().toString(); 
    AantalStrikes = editAantalStrikes.getText().toString(); 
    AantalSpares = editAantalspares.getText().toString(); 

    switch(view.getId()){ 
     case R.id.submitScoreButton: 
      if(!validate()) 
       Toast.makeText(getBaseContext(),"Enter some data!",Toast.LENGTH_LONG).show(); 
       new HttpAsyncTask().execute("http://localhost/ICTProjects3/ScoreController"); 
      break; 
    } 

} 



private class HttpAsyncTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 

     score = new ScoreData(); 

     score.setTotaleScore(TotaleScore); 
     score.setAantalStrikes(AantalStrikes); 
     score.setAantalSpares(AantalSpares); 

     return POST(urls[0],score); 
    } 

private boolean validate(){ 
    if(editTotaleScore.getText().toString().trim().equals("")) 
     return false; 
    else if(editAantalStrikes.getText().toString().trim().equals("")) 
     return false; 
    else if(editAantalspares.getText().toString().trim().equals("")) 
     return false; 
    else 
     return true; 
} 

private static String convertInputStreamToString(InputStream inputStream) throws IOException{ 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader((inputStream))); 
    String line = ""; 
    String result = "" ; 
    while ((line = bufferedReader.readLine()) != null) 
     result += line; 

    inputStream.close();; 
    return result; 
} 

我认为这是行之有效的。如果我使用我的Android模拟器&寻找小提琴手。我的模拟器发送到我的PHP控制器:

POST http://localhost/ICTProjects3/ScoreController HTTP/1.1 Accept: 
    application/json Content-type: application/json Content-Length: 85 
    Host: localhost Connection: Keep-Alive User-Agent: 
    Apache-HttpClient/UNAVAILABLE (java 1.4) 

{"scoreTotaal":"5","scoreStrikes":"55","scoreSpares":"555","Game_ID":3,"Google_ID":3} 

问题是。它什么都不做。我无法将其添加到我的数据库与我的控制器。它与我的方法没有问题:ScoreToevoegen($ aScoreData)。这是把它放入我的数据库。它的工作网络通常很适合在这里工作。 这是我的PHP控制器:

if (isset($_POST['json'])) 
    { 
     $aJson = $_POST['json']; 
     $aScoreData = json_decode($aJson, true); 

     $this->load->model('Score_model'); 
     $this->Score_model->ScoreToevoegen($aScoreData); // Inserting it in the database. 

    } 

我真的希望你们能帮助我。我困在这一刻。 谢谢!

编辑:ScoreToevoegen方法&也是基于webbased(即工作!)的控制器。它使用CodeIgniter

ScoreController.PHP

if(isset($_POST['UploadScore'])){ 
     if ($this->form_validation->run() == FALSE) { 
      $this->load->view('ScoreView', $data); 
     } 
     else { 
      $aScoreData =[ 
       //'Game_ID' => $this->input->post('gameID'), 
       //'Google_ID' => $this->input->post('googleID'), 
       'Game_ID' =>2, 
       'Google_ID' =>2, 
       'Totaal' => $this->input->post('scoreTotaal'), 
       'Strikes' => $this->input->post('scoreSpares'), 
       'Spare' => $this->input->post('scoreStrikes') 
      ]; 
     $this->load->model('Score_model'); 
     $this->Score_model->ScoreToevoegen($aScoreData); 

     $this->load->view('ScoreView', $data); 
    }} 

Score_Model.PHP

 public function ScoreToevoegen($aData) 
{ 
    $this->load->database(); 
    $this->db->insert('score', $aData); 
} 

回答

0

您正在将JSON数据作为请求正文发送,$ _POST ['something']用于从发布的表单中获取数据。

取而代之的是:

if (isset($_POST['json'])) 

你应该使用这样的事情:

$aScoreData = json_decode(file_get_contents('php://input'), true); 

if ($aScoreData) { 
    $this->load->model('Score_model'); 
    $this->Score_model->ScoreToevoegen($aScoreData); 
} 
+0

我试了一下,但还是不行。 – Tom

+0

使用var_dump检查$ aScoreData中的内容。如果这是空或假,请转储php://输入的内容,如果它是空的,则转储$ _post superglobal –

0

搞得我这有你ScoreToevoegen($ aScoreData)方法的问题。你可以粘贴你的功能代码。与MySQL连接时必定存在问题。

+0

我把它添加到我的职务。但那不可能是问题,它是小而且基于网络的,它正在工作。 – Tom

相关问题