2014-11-03 58 views
1

我试图用我的数据库连接我的应用程序。Android - JsonException在httppost上

我做这个脚本PHP:

<?php 

/*ci colleghiamo al database(attenti perchè se lavorate in locale 
l'host è 10.0.2.2 e non 127.0.0.1)*/ 
mysql_connect("localhost","mydb","") 
    or die("Impossibile connettersi al server MySQL.\n"); 
//selezioniamo il db a cui ci vogliamo connettere 
mysql_select_db("mydb") 
    or die("Impossibile aprire il database.\n"); 
//creo la tabella nel database 
mysql_query("CREATE TABLE IF NOT EXISTS `mydb`.`survey` (
        `Museum_ID` INT NOT NULL, 
       `Game_ID` INT NOT NULL, 
       `Vote` INT NOT NULL, 
       PRIMARY KEY (`Museum_ID`)) 
       ENGINE = InnoDB;"); 
$idMuseum = $_POST['Museum_ID']; 
$idGame = $_POST['Game_ID']; 
$Vote = $_POST['Vote'] 
$result = mysql_query("INSERT INTO `mydb`.`survey` (`Museum_ID`, `Game_ID`, `Vote`) VALUES ($idMuseum, $idGame, $Vote);"); 
$row = mysqli_fetch_array($result); 
$data = $row[0]; 
if($data){ 
echo $data; 


mysql_close(); 
?> 

,这是我的Java代码:

public class MakePost extends AsyncTask<String, Void, Void>{ 

    @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      //toggleUI(0); 

      pDialog = new ProgressDialog(Survey.this); 
      pDialog.setMessage("Sending data. Please wait..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(false); 
      pDialog.show(); 
     } 

    protected Void doInBackground(String... args) { 

      List<NameValuePair> parametriDaInviare = new ArrayList<NameValuePair>(2); 
      JSONObject json = null; 
      int success = -1; 
      updatesAv = false; 


      try { 
       if(checkedButton == R.id.lowChoise){ 
        //aggiungo alla lista parametri il voto 
        parametriDaInviare.add(new BasicNameValuePair("Vote", "1")); 
        parametriDaInviare.add(new BasicNameValuePair("Museum_ID", "1")); 
        parametriDaInviare.add(new BasicNameValuePair("Game_ID", "1")); 

        // get JSON Object by using POST method 
        json = jParser.makeHttpRequest(url_Survey, "POST", parametriDaInviare);    
        try 
        { 
         Log.d("PHP Response", json.toString()); 
         success = json.getInt(TAG_SUCCESS); 
         if(success == 1) 
         { 
          popupWindow.dismiss(); 
          updatesAv =true; 

         } 
         else { 
          updatesAv = false; 
         } 
         Log.d("UPDATES CHECK", "RESULT: " + updatesAv); 


        }catch (JSONException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
         updatesAv = false; 
        } 
       } 
       if(checkedButton == R.id.mediumChoise){ 
        //do something 

        parametriDaInviare.add(new BasicNameValuePair("Vote", "2")); 
        parametriDaInviare.add(new BasicNameValuePair("Museum_ID", "1")); 
        parametriDaInviare.add(new BasicNameValuePair("Game_ID", "1"));      
        // get JSON Object by using POST method 
        json = jParser.makeHttpRequest(url_Survey, "POST", parametriDaInviare);    
        try 
        { 
         Log.d("PHP Response", json.toString()); 
         success = json.getInt(TAG_SUCCESS); 
         if(success == 1) 
         { 
          popupWindow.dismiss(); 
          updatesAv =true; 

         } 
         else { 
          updatesAv = false; 
         } 
         Log.d("UPDATES CHECK", "RESULT: " + updatesAv); 


        }catch (JSONException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
         updatesAv = false; 
        } 
       } 
       if(checkedButton == R.id.highChoise){ 
        //do something 

        parametriDaInviare.add(new BasicNameValuePair("Vote", "3")); 
        parametriDaInviare.add(new BasicNameValuePair("Museum_ID", "1")); 
        parametriDaInviare.add(new BasicNameValuePair("Game_ID", "1"));      // get JSON Object by using POST method 
        json = jParser.makeHttpRequest(url_Survey, "POST", parametriDaInviare);    
        try 
        { 
         Log.d("PHP Response", json.toString()); 
         success = json.getInt(TAG_SUCCESS); 
         if(success == 1) 
         { 
          popupWindow.dismiss(); 
          updatesAv =true; 

         } 
         else { 
          updatesAv = false; 
         } 
         Log.d("UPDATES CHECK", "RESULT: " + updatesAv); 


        }catch (JSONException e) 
        { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
         updatesAv = false; 
        } 
       } 



      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       // da implementare 
      } 



    return null;  
    } 


    protected void onPostExecute(String file_url) { 
      // dismiss the dialog after getting all data 
      pDialog.dismiss(); 

     } 

当我发送的数据我有此错误:

11-03 13:20:55.918: E/JSON Parser(11238): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject 

我有使用php的经验并不多,我不知道在我的代码中是否有一些错误。 有人可以帮助我吗?

感谢

+0

我觉得URL的输出不是JSON。其中存在一些警告或错误消息。请在浏览器中检查后确认。 – 2014-11-03 12:33:33

+0

在浏览器我有这个错误:解析错误:语法错误,在mydb中意外T_VARIABLE/survey.php第20行 线20是插入查询 – Matt 2014-11-03 12:35:03

+0

发表您回应 – 2014-11-03 12:35:10

回答

1

变化
回声$数据

到 回波json_encode($数据);

在该行的末尾添加一个分号

$投票= $ _POST [ '投票'];

0

您的服务器大多是传回HTML的应用程序,然后试图解析失败。由于错误表示响应以br开始。请检查您是否得到您的服务器的正确响应

+0

在我的浏览器有这个错误:解析错误:语法错误,意外的T_VARIABLE在第20行mydb/survey.php。第20行是插入查询 – Matt 2014-11-03 12:36:48

+0

是的,这就是问题所在。 SQL查询失败,请再次检查SQL查询请 – 2014-11-03 12:37:37

+0

我如何在浏览器中模拟帖子? – Matt 2014-11-03 12:58:45

0

您需要更改您的PHP响应为这样 echo Json_encode($ data); 因为它发送平面HTML数据,这就是为什么你越来越JSONEXCEPTION

+0

如果我这样做:if($ data){ echo json_encode $ data; } 我在我的浏览器中有这个错误: 解析错误:语法错误,意外的T_VARIABLE,期待','或';'在第24行mydb/survey.php – Matt 2014-11-03 12:53:14

+0

检查你的SQL查询。 – 2014-11-03 15:01:36

0
  1. 您在错误的位置在您的查询分号:

更改此:VALUES ($idMuseum, $idGame, $Vote);");

VALUES ($idMuseum, $idGame, $Vote)");

  1. 正如阿米特库玛已经提到,你应该使用echo json_encode($data);
+0

如果我评论这篇文章,并且在我的数据库中插入值(1,1,1),那么我在浏览器中没有错误。该分号是不是问题:( – Matt 2014-11-03 13:57:45

+0

是值1,1,1插入成功在您的分贝? – 2014-11-03 14:37:59

+0

yesm他们!:/ – Matt 2014-11-03 16:16:36

1
  1. 首先你应该删除$row = mysqli_fetch_array($result); 这是一个插入无法取回!更何况你是混合 的mysqli和mysql扩展
  2. 使用的mysqli extenstions,你有机会接触到SQL注入
  3. 最后echo $data;是不是JSON它会破坏你的应用程序,因为你 atttempt解析JSON数据。
  4. 缺少分号$Vote = $_POST['Vote'];

if(!$result){ 
    echo json_encode(array('success'=> 0)); 
}else{ 
    echo json_encode(array('success'=> 1)); 
} 
+0

问题是分号和回声..我解决了我的问题,当我看到@Luke回答,就在你的前几分钟。 – Matt 2014-11-03 18:11:41

+1

@Matt很高兴知道它解决了 – meda 2014-11-03 18:13:01