PHP与安卓对接

1.db.php  封装好的用于连接数据库的类


  1. <?php  
  2. class Db{    
  3.     static private $_instance;    
  4.     static private $_connectSource;    
  5.     //因为是连接新浪sae服务器所以下面的参数不生效。  
  6.     /*private $_dbConfig=array(   
  7.         'host'=>'127.0.0.1',   
  8.         'user'=>'root',   
  9.         'password'=>'',   
  10.         'database'=>'value'   
  11.     ); */   
  12.     private function _construct(){    
  13.           
  14.     }    
  15.     
  16.     static public function getInstance(){    
  17.         //如果没有实例,则创建, 然后返回已创建的实例    
  18.          if(!(self::$_instance instanceof self)){    
  19.           self::$_instance =new self();    
  20.          }     
  21.          return self::$_instance;    
  22.     }    
  23.     public function connect(){    
  24.         if(!self::$_connectSource){    
  25.            self::$_connectSource=mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);   
  26.            //self::$_connectSource = @mysql_connect($this->_dbConfig['host'], $this->_dbConfig['user'], $this->_dbConfig['password']);   
  27.         if(!self::$_connectSource){   
  28.             //如果数据库连接不成功  
  29.             //抛出异常,在调用该connnect()函数时,通过try catch 进行捕获  
  30.             throw new Exception ('mysql connect error'.mysql_error);  
  31.        //die('mysql connect error'.mysql_error);    
  32.     }    
  33.      mysql_select_db(SAE_MYSQL_DB,self::$_connectSource);    
  34.      //mysql_select_db($this->_dbConfig['database'], self::$_connectSource);  
  35.      mysql_query("set names UTF8",self::$_connectSource);    
  36.         }    
  37.      return self::$_connectSource;    
  38.     }    
  39.     
  40. }    


2.response.php 用于封装通信数据(json或者xml)


  1. <?php  
  2.   
  3. class Response {  
  4.     const JSON = "json";  
  5.     /** 
  6.     * 按综合方式输出通信数据 
  7.     * @param integer $code 状态码 
  8.     * @param string $message 提示信息 
  9.     * @param array $data 数据 
  10.     * @param string $type 数据类型 
  11.     * return string 
  12.     */  
  13.     public static function show($code$message = ''$data = array(), $type = self::JSON) {  
  14.         if(!is_numeric($code)) {  
  15.             return '';  
  16.         }  
  17.   
  18.         $type = isset($_GET['format']) ? $_GET['format'] : self::JSON;  
  19.   
  20.         $result = array(  
  21.             'code' => $code,  
  22.             'message' => $message,  
  23.             'data' => $data,  
  24.         );  
  25.   
  26.         if($type == 'json') {  
  27.             self::json($code$message$data);  
  28.             exit;  
  29.         } elseif($type == 'array') {  
  30.             var_dump($result);  
  31.         } elseif($type == 'xml') {  
  32.             self::xmlEncode($code$message$data);  
  33.             exit;  
  34.         } else {  
  35.             // TODO  
  36.         }  
  37.     }  
  38.       
  39.     /** 
  40.     * 按json方式输出通信数据 
  41.     * @param integer $code 状态码 
  42.     * @param string $message 提示信息 
  43.     * @param array $data 数据 
  44.     * return string 
  45.     */  
  46.     public static function json($code$message = ''$data = array()) {  
  47.           
  48.         if(!is_numeric($code)) {  
  49.             return '';  
  50.         }  
  51.   
  52.         $result = array(  
  53.             'code' => $code,  
  54.             'message' => $message,  
  55.             'data' => $data  
  56.         );  
  57.   
  58.         echo json_encode($result);  
  59.         exit;  
  60.     }  
  61.   
  62.     /** 
  63.     * 按xml方式输出通信数据 
  64.     * @param integer $code 状态码 
  65.     * @param string $message 提示信息 
  66.     * @param array $data 数据 
  67.     * return string 
  68.     */  
  69.     public static function xmlEncode($code$message$data = array()) {  
  70.         if(!is_numeric($code)) {  
  71.             return '';  
  72.         }  
  73.   
  74.         $result = array(  
  75.             'code' => $code,  
  76.             'message' => $message,  
  77.             'data' => $data,  
  78.         );  
  79.   
  80.         //header("Content-Type:text/xml");  
  81.         $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";  
  82.         $xml .= "<root>\n";  
  83.   
  84.         $xml .= self::xmlToEncode($result);  
  85.   
  86.         $xml .= "</root>";  
  87.         echo $xml;  
  88.     }  
  89.   
  90.     public static function xmlToEncode($data) {  
  91.   
  92.         $xml = $attr = "";  
  93.         foreach($data as $key => $value) {  
  94.             if(is_numeric($key)) {  
  95.                 $attr = " id='{$key}'";  
  96.                 $key = "item";  
  97.             }  
  98.             $xml .= "<{$key}{$attr}>";  
  99.             $xml .= is_array($value) ? self::xmlToEncode($value) : $value;  
  100.             $xml .= "</{$key}>\n";  
  101.         }  
  102.         return $xml;  
  103.     }  
  104.   
  105. }  



3.checklogin.php 提供给客户端 ,让客户端使用GET请求,传入username,passwd 验证登录

  1. <?php  
  2. //这是app验证登录接口  
  3. //访问方式http://****.com/bee/checklogin.php   
  4. if($_GET['format']=='xml'){  
  5. header("Content-Type:text/xml");}  
  6. require_once('./response.php');//引入数据封装类  
  7. require_once('./db.php');//引入数据库类  
  8. $username=$_GET['username'];    
  9. $passwd=$_GET['passwd'];    
  10. $sql = "select * from user where `username`='$username' and `passwd`='$passwd'";    
  11. try{  
  12.     $connect=Db::getInstance()->connect();   
  13. }catch(Exception $e){  
  14.     Response::show(403,'数据库连接失败');   
  15. }  
  16.   
  17. $result=mysql_query($sql,$connect);  
  18. $videos=array();  
  19. //mysql_fetch_assoc()字段名key植是value,方便客户端解析。每行获取,区别与mysql_fetch_array()  
  20. while($video=mysql_fetch_assoc($result)){  
  21. $videos[]=$video;  
  22. }  
  23. //这样就从数据库中获取了数据存到了$videos[]中,接着需要转换成接口数据  
  24. if($videos){  
  25. Response::show(200,'首页数据获取成功',$videos);  
  26. //这样默认生成了json数据,如果需要xml数据,需要在访问时http://...com/list.php?format=xml  
  27. }else{  
  28. Response::show(400,'首页数据获取失败',$videos);  
  29. }  



------------------------------------------------------------------------------------------------------------------------------------------------------------

到这里服务端代码已经完成,接受客户端的hhtp get请求,通过查询数据库,验证用户名,密码是否正确。将结果封装成json或者xml,输出在浏览器中。供客户端读取。


下面是安卓客户端部分代码:


布局文件就不展示了,就是两个textview 和两个edittext,还有一个Button

直接上MainActivity.Java 


  1. package com.example.bee;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.IOException;  
  5. import java.io.InputStreamReader;  
  6. import java.net.HttpURLConnection;  
  7. import java.net.MalformedURLException;  
  8. import java.net.URL;  
  9.   
  10. import org.json.JSONArray;  
  11. import org.json.JSONException;  
  12. import org.json.JSONObject;  
  13.   
  14. import android.app.Activity;  
  15. import android.content.Intent;  
  16. import android.content.SharedPreferences;  
  17. import android.content.SharedPreferences.Editor;  
  18. import android.os.Bundle;  
  19. import android.os.Handler;  
  20. import android.os.Message;  
  21. import android.view.View;  
  22. import android.view.View.OnClickListener;  
  23. import android.widget.Button;  
  24. import android.widget.EditText;  
  25. import android.widget.Toast;  
  26.   
  27.    
  28.   
  29. public class Login extends Activity {  
  30.   
  31.     /** 
  32.      * 用于登录的界面 
  33.      */  
  34.     String result="",user,passwd;  
  35.     Handler myhandler;  
  36.     EditText userview,passwdview;  
  37.     Button login,register;  
  38.     Thread t;  
  39.     SharedPreferences sp;  
  40.     int code;  
  41.     String realname;  
  42.     @Override  
  43.     protected void onCreate(Bundle savedInstanceState) {  
  44.         super.onCreate(savedInstanceState);  
  45.         setContentView(R.layout.login);  
  46.         userview=(EditText) findViewById(R.id.login_edt_user);  
  47.         passwdview=(EditText) findViewById(R.id.login_edt_passwd);  
  48.         login=(Button) findViewById(R.id.btn_login);  
  49.         register=(Button) findViewById(R.id.btn_register);  
  50.         sp=getSharedPreferences("login", MODE_PRIVATE);  
  51.         String getname=sp.getString("username"null);  
  52.         if(getname==null)  
  53.         {  
  54.             Toast.makeText(Login.this"sp null"0).show();  
  55.         }else{  
  56.             Toast.makeText(Login.this"sp have"0).show();  
  57.             userview.setText(sp.getString("username"null));  
  58.             passwdview.setText(sp.getString("passwd"null));  
  59.         }  
  60.           
  61.         //登陆按钮点击事件  
  62.          login.setOnClickListener(new OnClickListener() {  
  63.             @Override  
  64.             public void onClick(View v) {  
  65.                 // TODO Auto-generated method stub  
  66.                   
  67.                     
  68.                  t=new Thread(new Runnable() {  
  69.                     @Override  
  70.                     public void run() {  
  71.                         // TODO Auto-generated method stub  
  72.                         try {  
  73.                             user=userview.getText().toString();  
  74.                             passwd=passwdview.getText().toString();  
  75.                             URL url=new URL("http://luo.sinaapp.com/e/checklogin.php?username="+user+"&passwd="+passwd);  
  76.                             HttpURLConnection urlConnection=(HttpURLConnection) url.openConnection();  
  77.                             InputStreamReader isr=new InputStreamReader(urlConnection.getInputStream());  
  78.                             BufferedReader br=new BufferedReader(isr);  
  79.                             result=br.readLine();   
  80.                             //对获得的json数据进行解析  
  81.                             try {  
  82.                                  JSONObject object=new JSONObject(result);  
  83.                                  code=object.getInt("code");  
  84.                                  JSONArray ja=  object.getJSONArray("data");  
  85.                                  String data=ja.getString(0);  
  86.                                  JSONObject secondobject=new JSONObject(data);  
  87.                                  realname=secondobject.getString("realname");  
  88.                             } catch (JSONException e) {  
  89.                                 // TODO Auto-generated catch block  
  90.                                 e.printStackTrace();  
  91.                             }  
  92.                             Message m1=myhandler.obtainMessage();  
  93.                             if(code==400)//登录失败  
  94.                             {  
  95.                                 m1.what=1;  
  96.                                 myhandler.sendMessage(m1);  
  97.                             }else if(code==200){//登录成功  
  98.                                 m1.what=2;  
  99.                                 myhandler.sendMessage(m1);  
  100.                             }else{//其他情况:联网失败,服务器异常等  
  101.                                 m1.what=3;  
  102.                                 myhandler.sendMessage(m1);  
  103.                             }  
  104.                               
  105.                         } catch (MalformedURLException e) {  
  106.                             // TODO Auto-generated catch block  
  107.                             e.printStackTrace();  
  108.                         } catch (IOException e) {  
  109.                             // TODO Auto-generated catch block  
  110.                             e.printStackTrace();  
  111.                         }  
  112.                     }  
  113.                 });  
  114.                 t.start();  
  115.             }  
  116.         });   
  117.       //注册点击事件  
  118.         /*register.setOnClickListener(new OnClickListener() { 
  119.              
  120.             @Override 
  121.             public void onClick(View v) { 
  122.                 // TODO Auto-generated method stub 
  123.                 Intent i=new Intent(Login.this,RegisterActivity.class); 
  124.                 startActivity(i); 
  125.                  
  126.             } 
  127.         });*/  
  128.         myhandler=new Handler(){  
  129.             @Override  
  130.             public void handleMessage(Message msg) {  
  131.                 // TODO Auto-generated method stub  
  132.                 super.handleMessage(msg);  
  133.                 if(msg.what==1){  
  134.                 Toast.makeText(Login.this"用户名或密码不正确"0).show();  
  135.                 } else if(msg.what==2){  
  136.                     Toast.makeText(Login.this"欢迎您:"+realname, 0).show();  
  137.                     /*登陆成功将数据写到本地保存下来,以便下次自动额登陆*/  
  138.                     sp=getSharedPreferences("login", MODE_PRIVATE);  
  139.                     Editor editor=sp.edit();  
  140.                     editor.putString("username", user);  
  141.                     editor.putString("passwd", passwd);  
  142.                     editor.putString("realname", realname);  
  143.                     editor.commit();  
  144.                     Intent i = new Intent(Login.this, MainActivity.class);  
  145.                     startActivity(i);  
  146.                     finish();  
  147.                 } else {  
  148.                     Toast.makeText(Login.this"网络连接失败"0).show();  
  149.                 }  
  150.             }  
  151.         };  
  152.          
  153.           
  154.     }  
  155.   
  156.   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值