在经过上网查资料的时候,我发现android想要往服务器端传递数据的话能够使用的方法很是的多。HttpClient ,HttpResponse ,OkHttpClient ,HttpURLConnection等等好多的方法,可是我发现里面有好多的方法所使用的包都是最原始的类库中不存在的(也多是我没有找到合适的使用方法)。试验到最后,我决定使用HttpURLConnection这个类来实现,由于感受这个不须要另外再从网上下载其余的类库,比较简单方便,直接能够使用。服务器端的话我是采用我比较熟悉的Apache+php来进行搭建的。php
android与PHP的交互是经过http网络编程实现的。须要遵照http协议。经过http://www......域名来实现访问。利用PHP文件做为接口进行数据库的远程操做。而android与PHP之间的数值传递是经过json数据类型。下面会有具体的java与PHP对于json数据类型的处理。下面我来展现一下。java
第一步:首先须要先定义能访问到你服务器的url地址,能够直接填写IP地址,也能够填写能访问到服务器的域名信息。例如你能够填写:http://www.myServer.com/test.php 或者 http://111.111.111.11/test.php,用一个URl类转换一下。android
//创建网络链接 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();
第四步:获取服务器端返回的数据。json
//获取网页返回数据 //获取输入流 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进行接收文件的时候不用再用$_POST或者$_REQUEST进行数据的接收。由于android传递过来的不是表单的数据,而是一个数据流,因此须要进行输入数据流的接收。缓存
$data=json_decode(file_get_contents("php://input"),true); $data[···] = ····; ..... return json_encode(['status'=>1,"message"=>"成功接收数据"]);
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; }
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的后台,有什么不妥的地方还请你们不吝赐教。服务器