资讯专栏INFORMATION COLUMN

android + php 后台开发

warkiz / 270人阅读

摘要:安卓与服务器的数据交互在我们进行开发的时候,避免不了的要进行登录注册,个人信息获取,数据交互等等这一系列的操作。而与之间的数值传递是通过数据类型。创建对象并添加数据。第五步就是进行数据的解析,获取后台返回的数据。

android+php 安卓与服务器的数据交互 在我们进行android开发的时候,避免不了的要进行登录注册,个人信息获取,数据交互等等这一系列的操作。这样就需要进行android端与服务器端进行数据的交互。但如何让他们进行数据的一个交互,我在这里也踩了不少坑,不过最后也算是交互成功了,下面我把我的方法写一下,不敢说是最好的,最起码是可以使用的,也请大家多多指教。

在通过上网查资料的时候,我发现android想要往服务器端传递数据的话可以使用的方法非常的多。HttpClient ,HttpResponse ,OkHttpClient ,HttpURLConnection等等好多的方法,但是我发现里面有好多的方法所使用的包都是最原始的类库中不存在的(也可能是我没有找到合适的使用方法)。试验到最后,我决定使用HttpURLConnection这个类来实现,因为感觉这个不需要另外再从网上下载其他的类库,比较简单方便,直接可以使用。服务器端的话我是采用我比较熟悉的Apache+php来进行搭建的。

android与PHP的交互是通过http网络编程实现的。需要遵守http协议。通过http://www......域名来实现访问。利用PHP文件作为接口进行数据库的远程操作。而android与PHP之间的数值传递是通过json数据类型。下面会有具体的java与PHP对于json数据类型的处理。下面我来展示一下。

第一步:首先需要先定义能访问到你服务器的url地址,可以直接填写IP地址,也可以填写能访问到服务器的域名信息。例如你可以填写:http://www.myServer.com/test.php 或者 http://111.111.111.11/test.php,用一个URl类转换一下。

//建立网络连接
String url_str= "http://111.111.111.11/test.php";
URL url=new URL(url_str);
HttpURLConnection http = (HttpURLConnection)url.openConnection();

第二步:设置连接的参数设置网络连接的一些参数,利用post进行数据的传输,跟网页的post传递类似。

//设置是否向httpUrlConnection 输出,因为设置的是post请求,参数放在http正文中,因此需要设为true,默认情况下是false;
http.setDoOutput(true);
//设置是否从httpUrlConnection读入,默认情况下是true
http.setDoInput(true);
//设置请求方式
http.setRequestMethod("POST");
//设置 post请求不能使用缓存
http.setUseCaches(false);
//这个设置比较重要,设置http请求的数据类型以及编码格式,因为这里使用json来传递数据,所以这一设置是json.
http.setRequestProperty("Content-type", "application/json;charset=utf-8");
//如果想要往后台传递图片的话,这里的设置有些不同,当然还会有其他的不同,这里先不详解了。
//http.setRequestProperty("Connection", "Keep-Alive");
//http.setRequestProperty("Charset", "UTF-8");
//http.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + "****");
//建立连接
http.connect();

//还会有一些其他参数,这个参数的设置可以根据自己的实际情况进行选择

第三步:获取输入流,写入要传递的数据。

 OutputStream out=http.getOutputStream();
 //创建json对象并添加数据。
 data = new JSONObject();
 data.put("name","Myname");
 data.put("password","MyPassword");
 
 //post请求
out.write(data.toString().getBytes());
out.flush();
out.close();

第四步:获取服务器端返回的数据。

//获取网页返回数据
//获取输入流
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(http.getInputStream()));
String line ="";
StringBuilder builder = new StringBuilder(); //建立输入缓冲区
while(null != (line=bufferedReader.readLine())){ //结束会读入一个null值
            line = new String(line.getBytes(),"utf-8");
            builder.append(line); //写入缓冲区
     }
String result = builder.toString(); //返回结果
bufferedReader.close();
http.disconnect();

//如果连接成功result里面记录的是后台返回的数据。

第五步:就是进行数据的解析,获取后台返回的数据。

    //把获取的字符串通过转换成json形式的数据类型
    JSONObject jsonObject=new JSONObject(result);
    //获取里面的数据
    returnResult=jsonObject.getInt("status");
    if(returnResult !=0){ 
    //如果返回的json里还有数组,需要用jsonArray进行获取,然后再从获取的数据里逐个获取json数据。
    user_account=jsonObject.getString("telephone");
    address=jsonObject.getString("address");
    username=jsonObject.getString("username");
    sex=jsonObject.getString("sex");
   
    
PHP服务器端

PHP进行接收文件的时候不用再用$_POST或者$_REQUEST进行数据的接收。因为android传递过来的不是表单的数据,而是一个数据流,所以需要进行输入数据流的接收。

$data=json_decode(file_get_contents("php://input"),true);
$data[···] = ····;

.....


return json_encode(["status"=>1,"message"=>"成功接收数据"]);
以我做的登录实例来进行全部代码的展示。 android端
private int login(String telephone,String password) throws IOException, JSONException {
        int returnResult=0;

        //建立网络连接
        String urlstr="你的服务器url地址";
        URL url=new URL(urlstr);
        HttpURLConnection http=(HttpURLConnection)url.openConnection();

        http.setDoOutput(true);
        http.setDoInput(true);
        http.setRequestMethod("POST");
        http.setUseCaches(false);
        http.setRequestProperty("Content-type", "application/json;charset=utf-8");
        http.connect();

        //获取输入流,想服务器写入数据
        OutputStream out=http.getOutputStream();
        //post请求
        JSONObject data=new JSONObject();
        data.put("telephone",telephone);
        data.put("password",password);
        out.write(data.toString().getBytes());
        out.flush();
        out.close();

        //读取网页返回的数据
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(http.getInputStream()));//获取输入流
        String line="";
        StringBuilder builder=new StringBuilder();//建立输入缓冲区
        while(null !=(line=bufferedReader.readLine())){ //结束会读入一个null值
            line=new String(line.getBytes(),"utf-8");
            builder.append(line); //写缓冲区
        }
        String result=builder.toString(); //返回结果
        bufferedReader.close();
        http.disconnect();

        try{
            //获取服务器返回的Json数据
            JSONObject jsonObject=new JSONObject(result);
            returnResult=jsonObject.getInt("status");
            if(returnResult !=0){
                user_account=jsonObject.getString("telephone");
                address=jsonObject.getString("address");
                username=jsonObject.getString("username");
                sex=jsonObject.getString("sex");
                if(username == null){
                    username ="未输入昵称";
                }
            }

        } catch (JSONException e) {
            Log.e("log_tag", "the Error parsing data "+e.toString());
        }
        return returnResult;

    }
php端
function Login(){
        $value=array();
        $data=array();

        //php文件接收输入端传递的数据流
        $value=json_decode(file_get_contents("php://input"),true);
        //查找数据库,判断是否存在该用户
        $login=Db::name("Db_name")->where("telephone",$value["telephone"])->find();
        if(!$login){
            return ["status"=>0];
        }else{
            $password=md5($value["password"]);
            if($password == $login["password"]){
                return ["status"=>$login["id"],"telephone"=>$login["telephone"],"username"=>$login["username"],"address"=>$login["address"],"sex"=>$login["sex"]];
            }else{
                return ["status"=>0];
            }
        }

    }

初次搭建android的后台,有什么不妥的地方还请大家不吝赐教。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/3091.html

相关文章

  • 终于,我还是下决心学Java后台

    摘要:我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习后台,因为最近接了私活的问题,好多都要后台和前端一起做。 我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习Java后台,因为最近接了私活的问题,好多都要Java后台和前端一起做。平常我在做什么,当然是忙着赚钱了 除了敲代码,你还有什么副业吗?接了活自己还要找开发Java后台开发的,为什么我自己不会呢...

    Zoom 评论0 收藏0
  • 终于,我还是下决心学Java后台

    摘要:我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习后台,因为最近接了私活的问题,好多都要后台和前端一起做。 我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习Java后台,因为最近接了私活的问题,好多都要Java后台和前端一起做。平常我在做什么,当然是忙着赚钱了 除了敲代码,你还有什么副业吗?接了活自己还要找开发Java后台开发的,为什么我自己不会呢...

    BlackHole1 评论0 收藏0
  • 终于,我还是下决心学Java后台

    摘要:我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习后台,因为最近接了私活的问题,好多都要后台和前端一起做。 我没有什么本事,人也丑,也不会忽悠,只能硬着头皮学习了。最近计划学习Java后台,因为最近接了私活的问题,好多都要Java后台和前端一起做。平常我在做什么,当然是忙着赚钱了 除了敲代码,你还有什么副业吗?接了活自己还要找开发Java后台开发的,为什么我自己不会呢...

    Null 评论0 收藏0
  • phpstorm安装配置

    摘要:经过一番瞎折腾搜索,了解到可以进行开发的工具有,,,等等。下载安装官方下载地址安装完成后新建一个,现在你看到的这个界面是我调整过之后的。浏览器运行调试编写一段代码,选择浏览器进行运行,,浏览器提示好吧,继续搜索资料进行配置。 菜鸟android一枚,之前做毕设的时候用的是android项目。但是在开发过程中发现没有后台,举步维艰,由于时间紧,搞了些假数据应付了事。这些日子稍闲下来,便决...

    xuexiangjys 评论0 收藏0
  • 使用vue开发微信公众号下SPA站点的填坑之旅

    摘要:原文见我的博客,点击进入使用开发微信公众号下站点的填坑之旅本文为我创业过程中,开发项目的填坑之旅。作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱。 原文见我的博客,点击进入使用vue开发微信公众号下SPA站点的填坑之旅 本文为我创业过程中,开发项目的填坑之旅。作为一个技术宅男,我的项目是做一个微信公众号,前后端全部自己搞定,不浪费国家一分钱^_^。 ...

    yeyan1996 评论0 收藏0

发表评论

0条评论

warkiz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<