国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

Android+PHP+MYSQL開發(fā)簡單實例的講解

2020-03-22 17:06:52
字體:
供稿:網(wǎng)友
Android+PHP+MYSQL開發(fā)簡單實例

前段時間做了一個安卓項目,需要用到數(shù)據(jù)庫,之前有寫過一點網(wǎng)頁相關(guān)的東西,所以打算用MYSQL+PHP這個黃金搭檔,雖然有點大材小用了。

本人是個貨真價實的菜鳥,對安卓并不了解,這個項目純屬是趕鴨子上架,之所以寫這篇博客,是想把我在項目中遇到的各種問題的解決方法分享給大家,希望對大家有所幫助。

接下來我將從三個方面介紹安卓客戶端如何通過PHP與MYSQL數(shù)據(jù)庫進行交互。

總述
簡單的說,安卓客戶端通過Http向本地服務(wù)器發(fā)出請求,訪問指定的php代碼,服務(wù)器端通過php代碼執(zhí)行數(shù)據(jù)庫的操作,
返回相應(yīng)的JSON數(shù)據(jù)。服務(wù)器可以理解為運行著某些服務(wù)器容器的電腦,比如你的電腦安裝了Apache并保持運行,那么電腦就變成了一臺服務(wù)器,只是這臺服務(wù)器沒有入網(wǎng),只能本地訪問。安卓客戶端通過HttpURLConnection向服務(wù)器中指定的php文件提交POST或GET請求,服務(wù)器端相應(yīng)php代碼接受來自客戶端的參數(shù)(如果是帶參傳遞)進行數(shù)據(jù)庫的操作,返回JSON數(shù)據(jù)給客戶端。
下面我以安卓客戶端通過用戶名密碼登陸為例進行說明。具體為:客戶端通過POST方法向服務(wù)器提交2個參數(shù):用戶名(username)和密碼(password)到指定login.php文件(這個文件寫登陸驗證的php代碼),該文件中通過查詢數(shù)據(jù)庫中是否存在該用戶以及密碼是否正確來返回客戶端相應(yīng)的JSON數(shù)據(jù)。
既然選擇了PHP+MYSQL,那么使用wamp server套件是比較方便的一種選擇,用過它的朋友都應(yīng)該輕車熟路了。
1.安卓客戶端
安卓客戶端所做的工作有:通過HttpURLConnection向服務(wù)器中指定的login.php文件提交POST或GET請求,服務(wù)器端接受來自客戶端的參數(shù)執(zhí)行l(wèi)ogin.php文件進行數(shù)據(jù)庫的操作,返回JSON數(shù)據(jù)給客戶端。
這里只貼出代碼部分,至于界面只需要2個文本編輯框edittext用于輸入用戶名密碼,一個button登陸按鈕,其id自行設(shè)置即可。
登陸按鈕響應(yīng)函數(shù)如下
 loginbtn.setOnClickListener(new View.OnClickListener() { @Override html' target='_blank'>public void onClick(View v) {//登陸按鈕監(jiān)聽事件/* ((App)getApplicationContext()).setTextData(et.getText().toString()); location_x.setText(((App)getApplicationContext()).getTextData());*/ new Thread(new Runnable() { @Override public void run() { try { int result = login(); //login()為向php服務(wù)器提交請求的函數(shù),返回數(shù)據(jù)類型為int if (result == 1) { Log.e( log_tag , 登陸成功!  //Toast toast=null; Looper.prepare(); Toast.makeText(PhpActivity.this, 登陸成功! , Toast.LENGTH_SHORT).show(); Looper.loop(); } else if (result == -2) { Log.e( log_tag , 密碼錯誤!  //Toast toast=null; Looper.prepare(); Toast.makeText(PhpActivity.this, 密碼錯誤! , Toast.LENGTH_SHORT).show(); Looper.loop(); } else if (result == -1) { Log.e( log_tag , 不存在該用戶!  //Toast toast=null; Looper.prepare(); Toast.makeText(PhpActivity.this, 不存在該用戶! , Toast.LENGTH_SHORT).show(); Looper.loop(); } catch (IOException e) { System.out.println(e.getMessage()); }).start(); });
登陸按鈕響應(yīng)函數(shù)中有個login()函數(shù),這個函數(shù)就是完成向服務(wù)器提交申請并獲取服務(wù)器返回json數(shù)據(jù)的功能。
 /* *用戶登錄提交post請求 * 向服務(wù)器提交數(shù)據(jù)1.user_id用戶名,2.input_pwd密碼 * 返回JSON數(shù)據(jù){ status : 1 , info : login success , sex : 0 , nicename : } private int login() throws IOException { int returnResult=0; /*獲取用戶名和密碼*/ String user_id=et.getText().toString(); String input_pwd=pwd.getText().toString(); if(user_id==null||user_id.length() =0){ Looper.prepare(); Toast.makeText(PhpActivity.this, 請輸入賬號 , Toast.LENGTH_LONG).show(); Looper.loop(); return 0; if(input_pwd==null||input_pwd.length() =0){ Looper.prepare(); Toast.makeText(PhpActivity.this, 請輸入密碼 , Toast.LENGTH_LONG).show(); Looper.loop(); return 0; String urlstr= http://192.168.191.1/LBS/login.php  //建立網(wǎng)絡(luò)連接 URL url = new URL(urlstr); HttpURLConnection http= (HttpURLConnection) url.openConnection(); //往網(wǎng)頁寫入POST數(shù)據(jù),和網(wǎng)頁POST方法類似,參數(shù)間用‘ ’連接 String params= uid= +user_id+ + pwd= +input_pwd; http.setDoOutput(true); http.setRequestMethod( POST  OutputStream out=http.getOutputStream(); out.write(params.getBytes());//post提交參數(shù) out.flush(); out.close(); //讀取網(wǎng)頁返回的數(shù)據(jù) BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(http.getInputStream()));//獲得輸入流 String line=  StringBuilder sb=new StringBuilder();//建立輸入緩沖區(qū) while (null!=(line=bufferedReader.readLine())){//結(jié)束會讀入一個null值 sb.append(line);//寫緩沖區(qū) String result= sb.toString();//返回結(jié)果 try { /*獲取服務(wù)器返回的JSON數(shù)據(jù)*/ JSONObject jsonObject= new JSONObject(result); returnResult=jsonObject.getInt( status //獲取JSON數(shù)據(jù)中status字段值 } catch (Exception e) { // TODO: handle exception Log.e( log_tag , the Error parsing data +e.toString()); return returnResult; }
對于這個login()函數(shù)有幾點說明:
1) urlstr= http://192.168.191.1/LBS/login.php 。其中192.168.191.1即本地電腦運行的Apache服務(wù)器的地址,這個地址會映射到Wamp安裝目錄下的WWW目錄,LBS即為WWW目錄下的文件夾。
一開始我使用android studio自帶模擬器進行測試,網(wǎng)上說是瀏覽器訪問10.0.2.0什么的就能訪問電腦上的本地Apache服務(wù)器,但是沒能成功訪問wamp自帶的apache服務(wù)器。
最后找到一個極好方法,就是使用真機測試,作為服務(wù)器的電腦需要安裝一個wifi共享軟件(如獵豹wifi),用要測試的真機連接該wifi后,手機瀏覽器訪問http://192.168.191.1,如果顯示
如下圖則說明手機訪問電腦apache服務(wù)器成功,至此服務(wù)器環(huán)境已經(jīng)搭建成功。login.php是放在電腦的apache服務(wù)器下的,比如我的是在D:/wamp/www/LBS文件夾下。
2) HttpURLConnection。本人曾在網(wǎng)上找到過一些安卓網(wǎng)絡(luò)請求的方法,但是大多都已棄用,使用HttpURLConnection是當(dāng)前還未棄用的一種方法,當(dāng)然對于高手來說,這就不值一提了。
3) JSONObject。
由于在后面的php代碼中所返回的數(shù)據(jù)為json數(shù)據(jù)類型,所以需要在客戶端進行解析,這并不困難,不清楚的可以搜索一下。
4)之前已經(jīng)說過,本人對安卓一竅不通,所以在測試時犯了一個大忌,就是網(wǎng)絡(luò)訪問不能放在主線程中,否則會阻塞主線程,造成UI假死等錯誤,所以需要單開一個線程,即
登陸按鈕響應(yīng)函數(shù)中的run方法。
2.服務(wù)器端
login.php在服務(wù)器容器中,時刻響應(yīng)著外部的訪問請求,主要工作是:
1)獲取手機端通過Post請求發(fā)送的用戶名密碼。
2)連接數(shù)據(jù)庫,從數(shù)據(jù)庫中查找是否有與該用戶名密碼一致的記錄,根據(jù)查找結(jié)果返回不同的Json數(shù)據(jù)。
3)Json數(shù)據(jù)是一種有效的客戶端與服務(wù)器端的交互方式。
 ?php *用戶登錄,服務(wù)器進行的處理 include( conn.php  mysql_select_db( lbs  $getid=$_POST[ uid //客戶端post過來的用戶名 $getpwd=$_POST[ pwd //客戶端post過來的密碼 $sql=mysql_query( SELECT * FROM user WHERE userid = $getid  $result=mysql_fetch_assoc($sql); if(!empty($result)){ //存在該用戶 if($getpwd==$result[ password ]){ //用戶名密碼匹配正確 mysql_query( UPDATE user SET status= 1 WHERE id =$result[id] /*這里的數(shù)組不需要加單引號*/ $back[ status ]= 1  $back[ info ]= login success  $back[ sex ]=$result[ sex  $back[ nicename ]=$result[ nicename  echo(json_encode($back));  }else{/*密碼錯誤*/ $back[ status ]= -2  $back[ info ]= password error  echo(json_encode($back));  }else{ //不存在該用戶 $back[ status ]= -1  $back[ info ]= user not exist  echo(json_encode($back));  mysql_close(); ? 

其中conn.php是數(shù)據(jù)庫連接文件,代碼如下

 ?php error_reporting(E_ALL ~E_NOTICE ~E_DEPRECATED); $conn=mysql_connect( localhost , root , admin ) or die( 數(shù)據(jù)庫服務(wù)器連接錯誤 .mysql_error()); mysql_select_db( mylocation ,$conn) or die( 數(shù)據(jù)庫訪問錯誤 .mysql_error()); mysql_query( SET NAMES utf8 ? 
3.MYSQL數(shù)據(jù)庫

至于數(shù)據(jù)庫,可以自行建立,根據(jù)上面php代碼可知,數(shù)據(jù)庫中有一個user表,表中有4個字段,分別是userid,password,nicename,sex.大家可自行建立即可(nicename,sex在本例中沒有用到)。截圖如下

上述工作完成后,將客戶端部署到真機上進行測試

輸入用戶名密碼,點擊登陸按鈕,結(jié)果如下:

4.總結(jié):本文所講只是php和安卓結(jié)合最簡單的一個例子,其實有許多大項目都是采用這種模式,比如新浪微博客戶端等,感興趣的讀者可以查詢相關(guān)的資料數(shù)據(jù)比如《Android+PHP最佳實踐》,再次說明,由于本人也是個菜鳥,從許多前輩們的博文中學(xué)到了許多,所以在這里和大家分享一下自己的學(xué)習(xí)經(jīng)驗,所以如果文中有錯誤之處還歡迎大家批評指正。

關(guān)鍵源碼

PS:CSDN什么時候把自家的文字編輯工具做的好用一點。

本文講解了Android+PHP+MYSQL開發(fā)簡單實例,更多相關(guān)內(nèi)容請關(guān)注php 。

相關(guān)推薦:

詳解PHP中的$this用法

Java與PHP之間的關(guān)聯(lián)

對于php實用經(jīng)驗的總結(jié)

以上就是Android+PHP+MYSQL開發(fā)簡單實例的講解的詳細內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 廉江市| 西乡县| 新蔡县| 江西省| 普格县| 汾西县| 棋牌| 静宁县| 民县| 韩城市| 安阳市| 德令哈市| 隆德县| 交城县| 蚌埠市| 霍林郭勒市| 诸暨市| 兰坪| 郧西县| 元朗区| 双辽市| 靖远县| 盐池县| 渑池县| 常宁市| 巨野县| 平远县| 麟游县| 浮山县| 秀山| 东城区| 明溪县| 永泰县| 大埔县| 寿光市| 莱州市| 泾源县| 清水县| 岢岚县| 兴化市| 黄冈市|