2014-11-03 59 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