突然想到這樣一個功能,用戶使用某客戶端登陸的時候,客戶端做了以下兩件事,一個是跳轉頁面,返回個人資訊;第二個是將資訊回傳到伺服器,伺服器將資料保存在資料庫中。這樣一來用戶的個人資訊也就獲取到了!
事不宜遲趕快實現吧!
剛好我的SAE雲豆還沒消耗完,我就打算用PHP做後台!
客戶端與服務端傳送現在比較流行傳遞Json字串! (還好之前了解Json),android將資料包裝成Json格式,然後透過Httpclient傳送給PHP後台,php根據屬性名稱得到Json字串,然後做出解析,最後儲存(MySQL)流程就是這樣。
第一步:Android客戶端封裝Json格式資料
首先把你想要傳送的資料包是Json格式的資料,並且可以使用Jsonson,我用Json用的或是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>
第三步:接收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>
第四步:保存資料
我將資料保存在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>
測試成功,數據可以正常的保存!
如果客觀感覺有用的話,按個讚。 。 。我會更加的努力
如果有不對的地方還請指出,我會改正!