安卓与PHP服务器交互

原创 2018年04月14日 23:29:21

android连接数据库的方式有两种,第一种是通过连接服务器,再由服务器读取数据库来实现数据的增删改查,这也是我们常用的方式。第二种方式是android直接连接数据库,这种方式非常耗手机内存,而且容易被反编译造成安全隐患,所以在实际项目中不推荐使用。

本篇博文主要讲述安卓如何与访问远程PHP服务器上的MySQL数据库。

安卓客户端通过HTTP协议与远程服务器进行数据传输,使用Json来作为载体。

注意:

在安卓4.0之后不允许在主线程进行比较耗时的操作,所以要另开一个线程来连接服务器并传输数据。

下面为访问服务器上checkadmin.php的代码,在该线程中将account与loginword以键值对的方式发送给远程服务器,然后接收服务器返回的Json数据格式的isSuccess布尔类型数据,完成登录验证。

private class RequestThread_admin implements Runnable {
        @SuppressWarnings("unchecked")
        public void run()  {
            HttpClient httpClient = new DefaultHttpClient();
            httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);//设置链接超时
            httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000); //设置读取超时
            String validateUrl = "http://”服务器地址“/checkadmin.php"; //这里是你与服务器交互的地址
            HttpPost httpRequst = new HttpPost(validateUrl);
            List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>(); //准备传输的数据
            params.add(new BasicNameValuePair("user", account));
            params.add(new BasicNameValuePair("password", loginword));
            try
            {
                httpRequst.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));//发送请求
                HttpResponse response = httpClient.execute(httpRequst);  //得到响应
                if(response.getStatusLine().getStatusCode() == 200)//返回值如果为200的话则证明成功的得到了数据
                {
                    StringBuilder builder = new StringBuilder();
                    //将得到的数据进行解析
                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(response.getEntity().getContent()));
                    for(String s =buffer.readLine(); s!= null; s = buffer.readLine())
                    {
                        builder.append(s);
                    }
                    System.out.println(builder.toString());
                    //得到Json对象
                    JSONObject jsonObject   = new JSONObject(builder.toString());
                    //通过得到键值对的方式得到值

                    isSuccess=jsonObject.getBoolean("isSuccess");
                
                    //在线程中判断是否得到成功从服务器得到数据
                }
                else
                {
                    id=0;
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }

    }

以下是服务器端checkadmin.php的代码:

<?php  
    //这里应该是是从Mysql数据库中得到相应的数据,  
    //这里仅仅是模拟过程,不再写相应的数据库交互代码  
       $username = str_replace(" ", "", $_POST['user']);  
       $password = str_replace(" ", "", $_POST['password']);  
       $id = 1;  
       $isSuccess=false;
    //将数据存储到数据中 
if($username=="admin")
{
if($password=="123456")
{$isSuccess=true;}

else {$isSuccess=false;}
    $arr = array(  
       
'isSuccess'=>$isSuccess  
        );  
  
    //将数组转成json格式进行传递  
    $strr = json_encode($arr);  
    echo($strr);  
?>  

主线程中登录按钮的监听器如下:

 new Thread(new RequestThread_admin()).start();
                try {

                    Thread.currentThread().sleep(100);//阻断0.1秒

//如果不阻断可能会出现在isSuccess返回前就做判断。当然可以通过设置Thread.Join方法来解决。

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //show.setText("成功与否:"+isSuccess);
                if(isSuccess)
                {
                    Intent intent=new Intent(MainActivity.this,AdminActivity.class);
                    Bundle bundle=new Bundle();
       
                    bundle.putString("account",account);
                  
                    intent.putExtras(bundle);
                    startActivity(intent);
                }
                if(!isSuccess)
                {
                    Toast.makeText(MainActivity.this, "账号或密码错误,请重新输入" +".....", Toast.LENGTH_LONG).show();
                } //弹出式的提示框

Android与PHP服务器交互

服务器端:server.php
  • caiwenfeng_for_23
  • caiwenfeng_for_23
  • 2014-05-16 14:45:36
  • 11205

android 与服务器交互

服务器端代码: testServlet.java package com.liuxiang; import java.io.IOException; import javax.servl...
  • taki_dsm
  • taki_dsm
  • 2012-08-13 11:02:57
  • 5157

Android端通过Okhttp与PHP服务器进行交互并实现文件上传下载(二)

简介 上一篇文章给出了Android端的部分代码,这篇文章则完成了服务器端的相关工作,我选择php来对上传文件进行处理,毕竟php比较好上手。 准备工作 1.准备一个服务器,可以选择购买云服...
  • qq_32925781
  • qq_32925781
  • 2016-11-22 15:02:05
  • 1306

安卓与服务器交互(MySQL)

  • 2015年04月18日 15:43
  • 10.92MB
  • 下载

android客户端与php服务器的json数据简单交互(二)

上一篇文章讲的是最简单的jso
  • u012803869
  • u012803869
  • 2014-05-05 16:32:30
  • 2408

Android客户端与PHP服务端交互(一)---框架概述

背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事...
  • mybelief321
  • mybelief321
  • 2015-05-01 23:01:26
  • 3606

Android客户端与服务器端交互方式总结

一、HttpClient 方式://第一步:创建一个客户端实例 HttpClient httpClient = new DefaultHttpClient(); //第二步:创建Http请求 Htt...
  • csp277
  • csp277
  • 2015-06-23 22:08:02
  • 675

androidcode与php交互

  • 2018年02月03日 22:27
  • 6.14MB
  • 下载

android客户端与servlet服务器交互简单示例

前段时间需要写一个能双向解析XML的程序,但是客户端只能从服务器里读,但是死活传不上去,倒腾了两天终于搞好了。 下面直接贴示例代码,不明白的话再问吧。 这是android客户端,记...
  • shouhurg
  • shouhurg
  • 2013-11-28 07:38:05
  • 828

Android通过get,post方式客户端与服务器端交互实例(慕课网笔记)

来自:http://www.imooc.com/learn/304 一个简单的Android客户端和服务器端传送数据的例子,客户端界面如下: 输入两个字符串name,age点击register...
  • hnyzwtf
  • hnyzwtf
  • 2015-12-29 19:48:39
  • 1947
收藏助手
不良信息举报
您举报文章:安卓与PHP服务器交互
举报原因:
原因补充:

(最多只允许输入30个字)