午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android和PHP MYSQL交互開(kāi)發(fā)實(shí)例

瀏覽:28日期:2022-09-07 18:48:42
總述

簡(jiǎn)單的說(shuō),安卓客戶(hù)端通過(guò)Http向本地服務(wù)器發(fā)出請(qǐng)求,訪問(wèn)指定的php代碼,服務(wù)器端通過(guò)php代碼執(zhí)行數(shù)據(jù)庫(kù)的操作, 返回相應(yīng)的JSON數(shù)據(jù)。服務(wù)器可以理解為運(yùn)行著某些服務(wù)器容器的電腦,比如你的電腦安裝了Apache并保持運(yùn)行,那么電腦就變成了一臺(tái)服務(wù)器,只是這臺(tái)服務(wù)器沒(méi)有入網(wǎng),只能本地訪問(wèn)。安卓客戶(hù)端通過(guò)HttpURLConnection向服務(wù)器中指定的php文件提交POST或GET請(qǐng)求,服務(wù)器端相應(yīng)php代碼接受來(lái)自客戶(hù)端的參數(shù)(如果是帶參傳遞)進(jìn)行數(shù)據(jù)庫(kù)的操作,返回JSON數(shù)據(jù)給客戶(hù)端。

下面我以安卓客戶(hù)端通過(guò)用戶(hù)名密碼登陸為例進(jìn)行說(shuō)明。具體為:客戶(hù)端通過(guò)POST方法向服務(wù)器提交2個(gè)參數(shù):用戶(hù)名(username)和密碼(password)到指定login.php文件(這個(gè)文件寫(xiě)登陸驗(yàn)證的php代碼),該文件中通過(guò)查詢(xún)數(shù)據(jù)庫(kù)中是否存在該用戶(hù)以及密碼是否正確來(lái)返回客戶(hù)端相應(yīng)的JSON數(shù)據(jù)。 既然選擇了PHP+MYSQL,那么使用wamp server套件是比較方便的一種選擇,用過(guò)它的朋友都應(yīng)該輕車(chē)熟路了。

1.安卓客戶(hù)端

安卓客戶(hù)端所做的工作有:通過(guò)HttpURLConnection向服務(wù)器中指定的login.php文件提交POST或GET請(qǐng)求,服務(wù)器端接受來(lái)自客戶(hù)端的參數(shù)執(zhí)行l(wèi)ogin.php文件進(jìn)行數(shù)據(jù)庫(kù)的操作,返回JSON數(shù)據(jù)給客戶(hù)端。 這里只貼出代碼部分,至于界面只需要2個(gè)文本編輯框edittext用于輸入用戶(hù)名密碼,一個(gè)button登陸按鈕,其id自行設(shè)置即可。 登陸按鈕響應(yīng)函數(shù)如下

loginbtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//登陸按鈕監(jiān)聽(tīng)事件/*((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ù)器提交請(qǐng)求的函數(shù),返回?cái)?shù)據(jù)類(lèi)型為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', '密碼錯(cuò)誤!');//Toast toast=null;Looper.prepare();Toast.makeText(PhpActivity.this, '密碼錯(cuò)誤!', Toast.LENGTH_SHORT).show();Looper.loop(); } else if (result == -1) {Log.e('log_tag', '不存在該用戶(hù)!');//Toast toast=null;Looper.prepare();Toast.makeText(PhpActivity.this, '不存在該用戶(hù)!', Toast.LENGTH_SHORT).show();Looper.loop(); }} catch (IOException e) { System.out.println(e.getMessage());} }}).start(); }});

登陸按鈕響應(yīng)函數(shù)中有個(gè)login()函數(shù),這個(gè)函數(shù)就是完成向服務(wù)器提交申請(qǐng)并獲取服務(wù)器返回json數(shù)據(jù)的功能

//用戶(hù)登錄提交post請(qǐng)求//向服務(wù)器提交數(shù)據(jù)1.user_id用戶(hù)名,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,'請(qǐng)輸入賬號(hào)', Toast.LENGTH_LONG).show();Looper.loop();return 0; } if(input_pwd==null||input_pwd.length()<=0){Looper.prepare();Toast.makeText(PhpActivity.this,'請(qǐng)輸入密碼', Toast.LENGTH_LONG).show();Looper.loop();return 0; } String urlstr='http://192.168.191.1/LBS/login.php'; URL url = new URL(urlstr); HttpURLConnection http= (HttpURLConnection) url.openConnection(); String params='uid='+user_id+’&’+'pwd='+input_pwd; http.setDoOutput(true); http.setRequestMethod('POST'); OutputStream out=http.getOutputStream(); out.write(params.getBytes()); out.flush(); out.close(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(http.getInputStream()));//獲得輸入流 String line=''; StringBuilder sb=new StringBuilder(); while (null!=(line=bufferedReader.readLine())){sb.append(line); } String result= sb.toString(); try {JSONObject jsonObject= new JSONObject(result);returnResult=jsonObject.getInt('status'); } catch (Exception e) {Log.e('log_tag', 'the Error parsing data '+e.toString()); } return returnResult;}

對(duì)于這個(gè)login()函數(shù)有幾點(diǎn)說(shuō)明:

1) urlstr='http://192.168.191.1/LBS/login.php'。其中192.168.191.1即本地電腦運(yùn)行的Apache服務(wù)器的地址,這個(gè)地址會(huì)映射到Wamp安裝目錄下的WWW目錄,LBS即為WWW目錄下的文件夾。

一開(kāi)始我使用android studio自帶模擬器進(jìn)行測(cè)試,網(wǎng)上說(shuō)是瀏覽器訪問(wèn)10.0.2.0什么的就能訪問(wèn)電腦上的本地Apache服務(wù)器,但是沒(méi)能成功訪問(wèn)wamp自帶的apache服務(wù)器。

最后找到一個(gè)極好方法,就是使用真機(jī)測(cè)試,作為服務(wù)器的電腦需要安裝一個(gè)wifi共享軟件(如獵豹wifi),用要測(cè)試的真機(jī)連接該wifi后,手機(jī)瀏覽器訪問(wèn)http://192.168.191.1,至此服務(wù)器環(huán)境已經(jīng)搭建成功。login.php是放在電腦的apache服務(wù)器下的,比如我的是在D:wampwwwLBS文件夾下。

2) HttpURLConnection。本人曾在網(wǎng)上找到過(guò)一些安卓網(wǎng)絡(luò)請(qǐng)求的方法,但是大多都已棄用,使用HttpURLConnection是當(dāng)前還未棄用的一種方法,當(dāng)然對(duì)于高手來(lái)說(shuō),這就不值一提了。

3) JSONObject。 由于在后面的php代碼中所返回的數(shù)據(jù)為json數(shù)據(jù)類(lèi)型,所以需要在客戶(hù)端進(jìn)行解析,這并不困難,不清楚的可以搜索一下。

4)之前已經(jīng)說(shuō)過(guò),本人對(duì)安卓一竅不通,所以在測(cè)試時(shí)犯了一個(gè)大忌,就是網(wǎng)絡(luò)訪問(wèn)不能放在主線程中,否則會(huì)阻塞主線程,造成UI假死等錯(cuò)誤,所以需要單開(kāi)一個(gè)線程,即 登陸按鈕響應(yīng)函數(shù)中的run方法。

2.服務(wù)器端

login.php在服務(wù)器容器中,時(shí)刻響應(yīng)著外部的訪問(wèn)請(qǐng)求,主要工作是:

1)獲取手機(jī)端通過(guò)Post請(qǐng)求發(fā)送的用戶(hù)名密碼。

2)連接數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中查找是否有與該用戶(hù)名密碼一致的記錄,根據(jù)查找結(jié)果返回不同的Json數(shù)據(jù)。

3)Json數(shù)據(jù)是一種有效的客戶(hù)端與服務(wù)器端的交互方式。 

<?php /**用戶(hù)登錄,服務(wù)器進(jìn)行的處理*/include('conn.php'); mysql_select_db('lbs'); $getid=$_POST[’uid’];//客戶(hù)端post過(guò)來(lái)的用戶(hù)名$getpwd=$_POST[’pwd’];//客戶(hù)端post過(guò)來(lái)的密碼 $sql=mysql_query('SELECT * FROM user WHERE userid =’$getid’'); $result=mysql_fetch_assoc($sql);if(!empty($result)){//存在該用戶(hù)if($getpwd==$result[’password’]){//用戶(hù)名密碼匹配正確mysql_query('UPDATE user SET status=’1’ WHERE id =$result[id]');/*這里的數(shù)組不需要加單引號(hào)*/$back[’status’]='1';$back[’info’]='login success';$back[’sex’]=$result[’sex’];$back[’nicename’]=$result[’nicename’];echo(json_encode($back)); }else{/*密碼錯(cuò)誤*/$back[’status’]='-2';$back[’info’]='password error';echo(json_encode($back)); } }else{//不存在該用戶(hù)$back[’status’]='-1';$back[’info’]='user not exist';echo(json_encode($back)); } mysql_close(); ?>

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

<?phperror_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); $conn=mysql_connect('localhost','root','admin') or die('數(shù)據(jù)庫(kù)服務(wù)器連接錯(cuò)誤'.mysql_error()); mysql_select_db('mylocation',$conn) or die('數(shù)據(jù)庫(kù)訪問(wèn)錯(cuò)誤'.mysql_error()); mysql_query('SET NAMES ’utf8’');?>3.MYSQL數(shù)據(jù)庫(kù)

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

Android和PHP MYSQL交互開(kāi)發(fā)實(shí)例

上述工作完成后,將客戶(hù)端部署到真機(jī)上進(jìn)行測(cè)試

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

Android和PHP MYSQL交互開(kāi)發(fā)實(shí)例

4.總結(jié)

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

以上就是Android和PHP MYSQL交互開(kāi)發(fā)實(shí)例的詳細(xì)內(nèi)容,更多關(guān)于Android和PHP交互的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 91久久国产视频 | 青娱乐在线视频免费观看 | 在线观看h| 日本黄a三级三级三级 | 日本精品视频一区二区三区 | 日本精品入口免费视频 | wwwwww日本| 日韩一区二区视频在线观看 | 超碰免费看 | 免费观看黄色的网站 | 九九热视频在线播放 | 国产精品视频久久久久久久 | 99久久99久久精品国产片果冰 | 日韩一级一区 | 午夜在线影院 | 久久视频一区二区 | 99re视频这里只有精品 | 免费观看黄一级视频 | 亚洲情在线 | 日本一级大毛片a一 | 亚洲视频中文字幕在线观看 | 91精品国产综合久久久蜜臀九色 | 成年人在线观看网站 | 亚洲天堂网在线观看 | 中文字幕亚洲视频 | 婷婷综合久久 | 国产精品久久久久无码av | 日本欧美在线观看 | www欧美视频 | 人人看av| 91传媒理伦片在线观看 | 国产精品综合网 | 国产精品99久久久久久www | 欧美毛片视频 | 动漫性做爰视频 | 欧美综合网| 亚洲精品美女 | a毛片大片| 欧美一级片 | 中文字幕在线观看二区 | 国产一区日韩 |