Android與PHP互動,Android傳遞JSON資料,PHP接受並儲存資料,androidjson
突然想到這樣一個功能,使用者使用某用戶端登陸的時候,用戶端做了以下兩件事,一個是跳轉頁面,返回個人資訊;第二個是將資訊返回到伺服器,伺服器將資料儲存在資料庫中。這樣一來使用者的個人資訊也就擷取到了!
事不宜遲趕快實現吧!
正好我的SAE雲豆還沒有消耗完,我就打算用PHP做後台!
用戶端與服務端傳送現在比較流行傳遞Json字串!(還好之前瞭解過Json),android將資料封裝成Json格式,然後通過Httpclient發送給PHP後台,php根據屬性名稱得到Json字串,然後做出解析,最後儲存(MySQL)流程就是這樣。
第一步:Android用戶端封裝Json格式資料
首先把你想要傳送的資料封裝成Json格式的資料,可以使用Json包或者Gson,我用的是Gson,我想要傳送的是User對象,代碼如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">Gson gson = new Gson();gson.toJson(user))</span>
轉換格式非常簡單,不做太多介紹
第二步:在登入返回線程中寫個非同步方法呼叫(當然了,你想在任何時候調用非同步都行,我就放在返回登入資訊的時候觸發非同步任務),非同步任務裡調用Httpclient發送請求的方法,代碼如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">/** * * 描述 向後台發送user資料 * @param user */<span style="font-family:Times New Roman;">public static void SaveDataToPhp(User user){Gson gson = new Gson();String url = "http://bmhjqs.sinaapp.com/ChzuAppDate/chzu_user_save.php"; HttpPost httpRequest = new HttpPost(url); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("userJson", gson.toJson(user))); try { HttpEntity httpEntity = new UrlEncodedFormEntity(params,"utf-8"); httpRequest.setEntity(httpEntity); HttpClient httpClient = new DefaultHttpClient(); HttpResponse httpResponse = httpClient.execute(httpRequest); if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ String result = EntityUtils.toString(httpResponse.getEntity()); Log.i("save", result);}else{ } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }</span></span>此時,資料開始發送到PHP了
第三步:接收Json資料
在php中,通過參數Key來擷取Value,代碼如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">//接受用戶端傳來的json資料<span style="font-family:Times New Roman;">$json_string = $_POST ["userJson"];$user = json_decode ( $json_user );if (ini_get ( "magic_quotes_gpc" ) == "1") {$json_string = stripslashes ( $json_string );}</span>$user = json_decode ( $json_string, true );//必須加參數‘true’,否則PHP不認為$user是個數組</span>需要注意的寫在注釋裡了,到此,就可以通過array[key]的方法來擷取值了;
第四步:儲存資料
我將資料儲存在SAE下的Mysql資料庫,代碼如下:
<span style="font-family:Microsoft YaHei;font-size:14px;">// 開始儲存到資料庫<span style="font-family:Times New Roman;">$link = mysql_connect ( SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS );if ($link) {mysql_select_db ( SAE_MYSQL_DB, $link );//根據ID判斷資料庫裡是否存在$isExit = "查詢語句";$result = mysql_query($isExit);if(mysql_num_rows($result) < 1){$sql = "插入語句...";mysql_query ( 'set names utf-8' );mysql_query ( $sql );echo 'STATE_OK';}else{echo 'STATE_EXIST';}mysql_close ( $link );} else {echo 'STATE_DB_FAIL';}</span></span>第五步:測試
測試成功,資料可以正常的儲存!
如果客觀感覺有用的話,點個贊。。。我會更加的努力
如果有不對的地方還請指出,我會改正!