设为首页收藏本站

IT技术擎 - 最棒的IT web技术交流社区

 找回密码
 注册为IT技术擎人

QQ登录

只需一步,快速开始

搜索
热搜: php h5 jquery
查看: 39|回复: 0

[框架开发] android + php 后台开发

[复制链接]
发表于 2018-5-16 23:50:09 | 显示全部楼层 |阅读模式
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类转换一下。
  1. //建立网络连接
  2. String url_str= "http://111.111.111.11/test.php";
  3. URL url=newURL(url_str);
  4. HttpURLConnection http = (HttpURLConnection)url.openConnection();
复制代码
第二步:设置连接的参数设置网络连接的一些参数,利用post进行数据的传输,跟网页的post传递类似。
  1. //设置是否向httpUrlConnection 输出,因为设置的是post请求,参数放在http正文中,因此需要设为true,默认情况下是false;
  2. http.setDoOutput(true);
  3. //设置是否从httpUrlConnection读入,默认情况下是true
  4. http.setDoInput(true);
  5. //设置请求方式
  6. http.setRequestMethod("POST");
  7. //设置 post请求不能使用缓存
  8. http.setUseCaches(false);
  9. //这个设置比较重要,设置http请求的数据类型以及编码格式,因为这里使用json来传递数据,所以这一设置是json.
  10. http.setRequestProperty("Content-type", "application/json;charset=utf-8");
  11. //如果想要往后台传递图片的话,这里的设置有些不同,当然还会有其他的不同,这里先不详解了。
  12. //http.setRequestProperty("Connection", "Keep-Alive");
  13. //http.setRequestProperty("Charset", "UTF-8");
  14. //http.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + "****");
  15. //建立连接
  16. http.connect();
  17. //还会有一些其他参数,这个参数的设置可以根据自己的实际情况进行选择
复制代码
第三步:获取输入流,写入要传递的数据。
  1. OutputStream out=http.getOutputStream(); //创建json对象并添加数据。 data = newJSONObject(); data.put("name","Myname"); data.put("password","MyPassword");
  2. //post请求
  3. out.write(data.toString().getBytes());
  4. out.flush();
  5. out.close();
复制代码
第四步:获取服务器端返回的数据。
  1. //获取网页返回数据
  2. //获取输入流
  3. BufferedReader bufferedReader =newBufferedReader(newInputStreamReader(http.getInputStream()));
  4. String line ="";
  5. StringBuilder builder = newStringBuilder(); //建立输入缓冲区
  6. while(null!= (line=bufferedReader.readLine())){ //结束会读入一个null值 line = newString(line.getBytes(),"utf-8"); builder.append(line); //写入缓冲区 }
  7. String result = builder.toString(); //返回结果
  8. bufferedReader.close();
  9. http.disconnect();
  10. //如果连接成功result里面记录的是后台返回的数据。
复制代码
第五步:就是进行数据的解析,获取后台返回的数据。
  1. //把获取的字符串通过转换成json形式的数据类型 JSONObject jsonObject=newJSONObject(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传递过来的不是表单的数据,而是一个数据流,所以需要进行输入数据流的接收。
  1. $data=json_decode(file_get_contents("php://input"),true);
  2. $data[···]= ····;
  3. .....
  4. returnjson_encode(['status'= >1,"message"= >"成功接收数据"]);
复制代码
以我做的登录实例来进行全部代码的展示。
android端
  1. privateintlogin(String telephone,String password) throwsIOException, JSONException { intreturnResult=0;
  2. //建立网络连接 String urlstr="马赛克~~~"; URL url=newURL(urlstr); HttpURLConnection http=(HttpURLConnection)url.openConnection();
  3. http.setDoOutput(true); http.setDoInput(true); http.setRequestMethod("POST"); http.setUseCaches(false); http.setRequestProperty("Content-type", "application/json;charset=utf-8"); http.connect();
  4. //获取输入流,想服务器写入数据 OutputStream out=http.getOutputStream(); //post请求 JSONObject data=newJSONObject(); data.put("telephone",telephone); data.put("password",password); out.write(data.toString().getBytes()); out.flush(); out.close();
  5. //读取网页返回的数据 BufferedReader bufferedReader=newBufferedReader(newInputStreamReader(http.getInputStream()));//获取输入流 String line=""; StringBuilder builder=newStringBuilder();//建立输入缓冲区 while(null!=(line=bufferedReader.readLine())){ //结束会读入一个null值 line=newString(line.getBytes(),"utf-8"); builder.append(line); //写缓冲区 } String result=builder.toString(); //返回结果 bufferedReader.close(); http.disconnect();
  6. try{ //获取服务器返回的Json数据 JSONObject jsonObject=newJSONObject(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 ="未输入昵称"; } }
  7. } catch(JSONException e) { Log.e("log_tag", "the Error parsing data "+e.toString()); } returnreturnResult;
  8. }
复制代码
php端
  1. functionLogin(){ $value=array(); $data=array();
  2. //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]; } }
  3. }
复制代码
初次搭建android的后台,有什么不妥的地方还请大家不吝赐教。



上一篇:iOS 常用手势
下一篇:消息队列的两种模式
该用户未在地球留下任何的痕迹

本版积分规则

QQ|小黑屋|帮助|IT技术擎 ( 沪ICP备15054863号  

GMT+8, 2018-10-18 10:46

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表