android + php 后台开发
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的后台,有什么不妥的地方还请大家不吝赐教。
android + php 后台开发的更多相关文章
- Android中后台的劳动者“服务”
前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...
- (译)cocos2d-x跨android&ios平台开发入门教程
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- Android省电开发 浅析
相信对于Android App省电的开发,一切性能优化都可以达到App的省电开发,所以一个省电的Android应用,性能优化占据很重要的位置.除此之外整理了几点关于Android应用省电的开发技巧. ...
- Basic4android:多功能的Android应用软件快速开发平台
Basic4android 是目前最简单.最强大的Android平台快速应用开发工具. ( "Basic4android is the simplest and most powerful ...
- Android + HTML5 混合开发
摘要: 对于 Android + HTML5 混合开发以下的观点仅仅是我的个人观点,如果有什么不对的地方请指正 简介: 混合开发的 App(Android + HTML5)就是在一个 App 中内嵌一 ...
- 关于怎么快速学好Android应用程序开发及其其他编程语言(大牛和高手勿喷,此篇文章也适合刚入门小师弟和小师妹)
无论你是从.NET转过来的也好 还是从PHP转过来的等等等,能看到这篇文章的人一般都是想快速转行到Android应用程序开发,希望我的这篇文章能勉励到各位的同时,也能勉励我自己. 1.编程语言基本都会 ...
- SpringBoot技术栈搭建个人博客【后台开发】
前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
(android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图 http://www.cnblogs.com/macroxu-1982/archive/2011/09/13 ...
- 【转】C++后台开发之我见
工作也快两年了,偶然看到自己以前写过的一些技术博客,发现自己自毕业后一直没有更新过自己的技术博客,趁现在是刚过完春节快要回公司工作之际,谈谈我个人对后台开发的一些个人见解,希望能够对在校的学生或者刚刚 ...
随机推荐
- popupwindow和listview
在使用PopupWindow的时候,有一个不好的地方就是不太好设置弹出窗体的大小.如果指定绝对大小,那么对于不同分辨率不同尺寸的手机来说,显示出来效果会不同,从而导致用户体验不佳. 为了达到Popup ...
- gradle 修改生成的apk的名字
在app的module里的build.gradle文件中,在android { ...}里面加上这样一段代码,即可修改生成的apk的文件名. android.applicationVariants.a ...
- 【IOS 开发】Object - C 语法 之 类型转换
作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3913507 ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(二)
打开Ai按需求依次绘制机器人身体,手臂和篮框: 因为是实验性质的游戏所以没必要在这上面花太多功夫,画出意思即可.虽然是2D游戏,但实际游戏中可以表现出伪3D的图形效果;尽管本猫这次画的游戏元素都是满满 ...
- java线程池ThreadPoolExecutor 如何与 AsyncTask() 组合使用
简单说下Executors类,提供的一系列创建线程池的方法: 他们都有两个构造方法 1. --------newFixedThreadPool (创建一个定长线程池,可控制线程最大并发数,超出的线程会 ...
- Shell脚本的调试技术
编程中必不可少的一点就是调试,Shell脚本以其强大的功能令人向往,当然,它的强大之处不只是体现在语言的实现功能上,更强大的是它的调试功能,下面,我将以实例讲解Shell脚本的调试技术. 下面是我所用 ...
- H5学习之旅-H5的框架(13)
H5框架语法介绍 :frame:框架对于页面的设计有很大的作用 frameSet:框架集标签定义如何将窗口分割为框架 ,每一个frameset定义一些列行或者列,rowS/COLS规定了每行或者每列占 ...
- 1、libgdx简介
Libgdx 是一个跨平台和可视化的的开发框架.它当前支持Windows,Linux,Mac OS X,Android,IOS和HTML5作为目标平台. Libgdx允许你一次编写代码不经修改部署到多 ...
- Cocos2d中update与fixedUpdate的区别(三)
没错!现在的情况是很糟糕.因为玩家不会看到平滑的动作. 不管怎样,我们都对此无能为力.玩家期待在1秒后小球出现在位置(8),所以我们应该把球放在那里. 我们不会讨论如何避免掉帧的情况.对于这个例子我们 ...
- android 自定义下拉菜单
本实例的自定义下拉菜单主要是继承PopupWindow类来实现的弹出窗体,各种布局效果可以根据自己定义设计.弹出的动画效果主要用到了translate.alpha.scale,具体实现步骤如下: 先上 ...