2012-06-12 115 views
2

我正在構建一個Android遊戲,我試圖從MySql數據庫下載用戶的配置文件到本地SQLite數據庫。我能夠如此配置文件到服務器,但無法檢索它。從MySql通過PHP + JSON獲取狀態

下面是相關的Android方法,應該沒有問題,他們他們正常工作,雖然邏輯本身可能會關閉。

//LOAD PROFILE CLASS 
    userFunctions.getServerGameState(email, monster, qty, exp); 
    db.saveLocalGameSate(monster, qty, exp); 
    //FUNCTIONS CLASS 
    public JSONObject getServerGameState(String email, String monster, int qty, int exp) { 
    // Building Parameters 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("tag", get_game_state)); 
    params.add(new BasicNameValuePair("email", email)); 
    params.add(new BasicNameValuePair("monster", monster)); 
    params.add(new BasicNameValuePair("qty", Integer.toString(qty))); 
    params.add(new BasicNameValuePair("exp", Integer.toString(exp))); 

    // getting JSON Object 
    JSONObject json = jsonParser.getJSONFromUrl(monsterURL, params); 
    // return json 
    return json; 
} 
    //DB HANDLER CLASS 
    public void saveLocalGameSate(String monster, int qty, int exp){ 

    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_MONSTER, monster); // Do they own it 
    values.put(KEY_QTY, qty); // Number of things they own 
    values.put(KEY_EXP, exp); // monster's level 

    // Inserting Row 
    db.insert(USERPROFILES_TABLE, null, values); 
    db.close(); // Closing database connection 

} 

這裏是PHP,我相信我的錯誤在於這兩個文件之一。

的index.php

else if ($tag == 'get_game_state') { 
    $email = $_POST['email']; 
    $monster = $_GET['monster']; 
    $qty = $_GET['qty']; 
    $exp = $_GET['exp']; 
    $result = $db->getGameState($email, $monster, $qty, $exp); 
     if (!empty($result)) { 

     echo json_encode($response); 
    } else { 
     $response["error"] = 1; 
     $response["error_msg"] = "Error getting game state from server"; 
     echo json_encode($response); 
    } 

的functions.php

public function getGameState($email, $monster, $qty, $exp) { 
    $result = mysql_query("SELECT monster AND qty AND exp WHERE email = '$email'"); 
    $row = mysql_fetch_assoc($result); 

     if (mysql_num_rows($result) > 0) { 
     $gamestate = array(); 
     $gamestate["monster"] = $result["monster"]; 
     $gamestate["qty"] = $result["qty"]; 
     $gamestate["exp"] = $result["exp"]; 

     // success 
     $response["success"] = 1; 

     // user node 
     $response["GameState"] = array(); 

     array_push($response["GameState"], $gamestate); 

     // echoing JSON response 
     echo ($response); 
     } else { 
      return false; 
     } 

下面是我收到

一些錯誤消息
06-12 14:15:52.046: E/JSON(10577): <b>Warning</b>: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in 

    <b>/home/content/40/8529140/html/webapps/monster/include/DB_Functions.php</b> on line <b>145</b><br /> 
06-12 14:15:52.046: E/JSON(10577): <b>Warning</b>: mysql_num_rows() expects parameter 1 to be resource, boolean given in <b>/home/content/40/8529140/html/webapps/monster/include/DB_Functions.php</b> on line <b>147</b><br /> 
06-12 14:15:52.046: E/JSON(10577): {"tag":"get_game_state","success":0,"error":1,"error_msg":"Error getting game state from server"} 
06-12 14:15:52.046: E/JSON Parser(10577): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject 

最後請不要告訴我,我的PHP不安全我知道這個 PHP是不是我的強項,我看起來以啓動並運行測試版本。 PDO是我的發展路線圖,將會實施。

謝謝。

UPDATE

固定SQL語句後,從正確的表

06-12 15:03:48.216: E/JSON Parser(11427): Error parsing data org.json.JSONException: Value Array of type java.lang.String cannot be converted to JSONObject 
+0

可以請您分享您期望在服務器端(PHP)的「請求」結構嗎? –

+0

您的mysql_query()失敗。使用mysql_error()來找出原因。 – jlasarte

回答

1

$結果= mysql_query選擇( 「選擇怪物數量和實驗WHERE電子郵件= $電子郵件'」 );

You missed table name . It should be as follows : 

$result = mysql_query("SELECT monster,qty,exp from table_name WHERE email = '$email'") 
+0

謝謝你,這是SQL語句失敗的原因。愚蠢的錯誤。請立即在相關錯誤消息的底部查看我的更新。 – KDEx

+0

你是如何解析你對json的迴應的? – Dhruvisha

+0

爲了不發佈整個班級,我使用了與[seen-here]相同的班級(http://www.androidhive.info/2012/01/android-login-and-registration-with-php-mysql -and-sqlite /)如果你確實控制了+ F「JSON PARSER CLASS」,我正在使用確切的類。 – KDEx