继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

android前端如何与php后台进行交互

繁花如伊
关注TA
已关注
手记 359
粉丝 39
获赞 295

android客户端和php+mysql+apache搭建的服务器之间的简单交互,实现登入功能。


实现原理就是android客户端发送请求,传给服务器登入的用户名密码,服务器收到这些,连接到数据库查询,如果用户名和密码匹配正确,就输出字符串返回给客户端。



android和php交互 android和java交互都是一样的,android写出接口 通过http请求 php接收到请求之后 服务器做处理 返回值 android接收到再显示出来即可 
原理其实是和html和php交互一样的



服务器端:
先在mysql里面建一个testlogin的数据库,里面有一个users表,记录了id,用户名和密码。

在php的虚拟目录下新建个php项目,创建conn.php和login.php文件。刚学点php写的不好。
conn.php是连接mysql数据库的。代码如下:


  1. <?php

  2. $dbhost = "localhost:3306";

  3. $dbuser = "root"; //我的用户名

  4. $dbpass = ""; //我的密码

  5. $dbname = "testlogin"; //我的mysql库名

  6. $cn = mysql_connect($dbhost,$dbuser,$dbpass) or die("connect error");

  7. @mysql_select_db($dbname)or die("db error");

  8. mysql_query("set names 'UTF-8'");

  9. ?>login.php代码:<?php

  10. include ("conn.php");//连接数据库

  11. $username=str_replace(" ","",$_POST['name']);//接收客户端发来的username;

  12. $sql="select * from users where name='$username'";

  13. $query=mysql_query($sql);

  14. $rs = mysql_fetch_array($query);if(is_array($rs)){

  15. if($_POST['pwd']==$rs['password']){

  16. echo "login succeed";

  17. }else{

  18. echo "error";

  19. }

  20. }

  21. ?>

复制代码



php代码写的很烂,服务器算是架设完了。。

android客户端:

下面是主要的代码:

  1. class LoginHandler implements Runnable {

  2. @Override

  3. public void run() {

  4. // TODO Auto-generated method stub

  5. //get username and password;

  6. userName = user_name.getText().toString().trim();

  7. password = pass_word.getText().toString().trim();

  8. //连接到服务器的地址,我监听的是8080端口

  9. String connectURL="http://192.168.1.100:8080/text0/com.light.text/login.php/";

  10. //填入用户名密码和连接地址

  11. boolean isLoginSucceed = gotoLogin(userName, password,connectURL);

  12. //判断返回值是否为true,若是的话就跳到主页。

  13. if(isLoginSucceed){

  14. Intent intent = new Intent();

  15. intent.setClass(getApplicationContext(), HomeActivity.class);

  16. startActivity(intent);

  17. proDialog.dismiss();

  18. }else{

  19. proDialog.dismiss();

  20. // Toast.makeText(ClientActivity.this, "登入错误", Toast.LENGTH_LONG).show();

  21. System.out.println("登入错误");

  22. }

  23. }

  24. }//登入的方法,传入用户 密码 和连接地址

  25. private boolean gotoLogin(String userName, String password,String connectUrl) {

  26. String result = null; //用来取得返回的String;

  27. boolean isLoginSucceed = false;

  28. //test

  29. System.out.println("username:"+userName);

  30. System.out.println("password:"+password);

  31. //发送post请求

  32. HttpPost httpRequest = new HttpPost(connectUrl);

  33. //Post运作传送变数必须用NameValuePair[]阵列储存

  34. List params = new ArrayList();

  35. params.add(new BasicNameValuePair("name",userName));

  36. params.add(new BasicNameValuePair("pwd",password));

  37. try{

  38. //发出HTTP请求

  39. httpRequest.setEntity(new UrlEncodedFormEntity(params,HTTP.UTF_8));

  40. //取得HTTP response

  41. HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);

  42. //若状态码为200则请求成功,取到返回数据

  43. if(httpResponse.getStatusLine().getStatusCode()==200){

  44. //取出字符串

  45. result=EntityUtils.toString(httpResponse.getEntity());

  46. ystem.out.println("result= "+result);

  47. }

  48. }catch(Exception e){

  49. e.printStackTrace();

  50. }

  51. //判断返回的数据是否为php中成功登入是输出的

  52. if(result.equals("login succeed")){

  53. isLoginSucceed = true;

  54. }

  55. return isLoginSucceed;

  56. }

复制代码




登入成功后会跳到主页:

代码就这样多,实现的最简单的登入方法,其实还有很多要实现的,需要为用户保存用户名和密码及登入成功后或者不成功后的反馈等。






说白了PHP服务器就是做逻辑和数据处理,然后按照某个固定格式输出出来,android使用http协议或者是soap等其他协议来进行获取对应数据即可。

前端不需要知道后台具体怎么实现的,只是知道我要什么东西,然后后台封装这些东东给你他(返)。




Android客户端与服务器数据交互流程

一个门户网站的制作的流程:

首先,由网页设计师只做网页设计,即画出来网站在浏览器中显示的样子,然后由前端人员编写Html+CSS+JS来实现网站的动态效果,比如说导航栏的下拉显示,然后Ajax的局部信息更新等,然后通过后台程序如JSP,PHP, .NET等语言将数据库中的信息与前台页面相结合,这样,一个站就这样被建好了。

而Android客户端,也是有UI设计师,UI前端,程序构成的,同样程序这边的话,最近Html5+CSS3的火热开启,很多公司也需要html5+css3进行Android程序的开发了。呜呜,抢我的饭碗。虽然说哥也是懂html+css的。嘿嘿,这样解释的话,可能大家不清楚,其实木有必要弄清楚网站的建站过程,这里只是给大家普及一下知识,没必要弄清楚。


基础知识:我们需要知道,Http协议是基于TCP协议的,而TCP协议是一种有连接,可靠的传输协议,如果丢失的话,会重传。所以这样的话,就不会有数据的丢失了。


而Http协议有三种方法,Get,Post,Head方法,但是用的多的只有Get和Post方法,Get方法是将请求参数放在请求头中,所以请求的参数在URL中可见,而Post方法是将请求参数放在数据部分,所以在URL中不可见,Post相对来说保密,所以在提交重要信息的时候,用的都是HttpPost方法来实现的. 


而在B/S模式中,B代表浏览器,S代表服务器,在浏览器和服务器的通信之中,因为B/S之间不会一直保持连接,所以才会加入Cookie机制,来辨认所操作的对象。


用户浏览网页的操作如下:当用户点击一个连接或者一个按钮的时候,浏览器通过发送一个请求给服务器,然后由服务器接收该请求,然后解析到用户请求的是哪些内容,然后查找到相关资源,再将数据返回给浏览器,由浏览器解析数据,然后显示给用户看到用户所需要看到的页面。


所以,Android和B/S模式差不多,其实也就是发送请求,接收数据,然后解析数据,显示到手机上的过程,没什么太大的区别,谁让咱用的是互联网,用的是TCP/IP协议呢,是吧。


要理解是:所有的操作都是向服务器请求数据的过程。



首先,我们要熟悉Android的HttpGet和HttpPost请求。

其中Apache公司已经提供了两个类,叫:HttpGet和HttpPost两个类。两个类的用法不同,不解释贴代码:

1.        使用HttpGet请求Baidu的主页:

//使用HttpGet方法,把百度的主页传入

HttpGet hettpGet = new HttpGet("http://www.baidu.com/");

//使用默认的HttpClient

HttpClient hc = new DefaultHttpClient();

try {

//执行HttpGet方法,并且获取返回的响应

        HttpResponse response = hc.execute(hettpGet);

//如果响应码为200则表示获取成功,否则为发生错误

if (response.getStatusLine().getStatusCode() == 200) {

//s就是获得的HTML代码

        String s = EntityUtils.toString(response.getEntity());

        System.out.println(s);

}

} catch (ClientProtocolException e)

{

        e.printStackTrace();

        } catch (IOException e)

{                                            e.printStackTrace();

                                }

   

这样就向百度服务器发送了一个HttpGet请求,请求的是百度的搜索首页,服务器返回来都是Html代码,只是浏览器有解析HTML的功能,将HTML代码转换成所显示的页面,所以,打印出来的都是HTML代码。


//使用HttpPost发送请求

HttpPost httpPost = new HttpPost(url);       

//使用NameValuePaira保存请求中所需要传入的参数

List<NameValuePair> paramas = new ArrayList<NameValuePair>();

        paramas.add(new BasicNameValuePair("a", "a"));

        try {

 

HttpResponse httpResponse;

//将NameValuePair放入HttpPost请求体中

httpPost.setEntity(new UrlEncodedFormEntity(paramas,

                                                        HTTP.UTF_8));

//执行HttpPost请求

httpResponse = new DefaultHttpClient().execute(httpPost);

//如果响应码为200则表示获取成功,否则为发生错误

if (httpResponse.getStatusLine().getStatusCode() == 200) {

String s = EntityUtils.toString(httpResponse

                                                .getEntity());}

                                } catch (UnsupportedEncodingException e) {

                                        // TODO Auto-generated catch block

                                        e.printStackTrace();

                                } catch (ClientProtocolException e) {

                                        // TODO Auto-generated catch block

                                        e.printStackTrace();

                                } catch (IOException e) {

                                        // TODO Auto-generated catch block

                                        e.printStackTrace();

                                }   

  

这样就发送了一个HttpPost请求了。


所有的获取数据操作基本上都是在HttpGet和HttpPost上拓展开的,然后发送了请求之后呢,服务器就会接受到一个请求了,服务器接收到请求就会通过方法来接收到 在Android客户端中发送的参数,并且通过后台程序来解析参数,然后通过数据库查找到所需要的信息,然后通过PHP后台将数据处理成JSON数据格式返回给HttpResponse的Entity,然后通过EntitiyUtils.toString方法来将Entity转化成为String对象,然后所得到的String对象呢就是一个JSON数据了。

接下来的事情就是JSON数据的解析啦。   


原理:

最后简单说一下动态建站的过程吧:页面分为两种,一种静态的,一种动态的,现在静态的站基本上都没了,

全是动态的了,静态页面全是用Html+CSS写的,只能实现简单的从一个页面打开另外一个页面,没有与服务器进行数据交互的过程,只是进行简单的加载静态页面,不会有数据从数据库里面进行差删改查等操作,并且不用使用模板生成器生成文件,再将文件内容返回给浏览器呢而其中呢,


而动态建站的过程就是这样的:首先由发送请求给服务器,然后服务器通过数据库查询数据,然后再将查询出来的数据与模板生成器结合,生成一个.php文件,然后浏览器会将php文件解析成为html然后显示在浏览器上显示。

原文链接:http://www.apkbus.com/blog-822715-71980.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP