您好,欢迎访问一九零五行业门户网

Android客户端与PHP服务端通信(二)

概述
    本节通过一个简单的demo程序简单的介绍android客户端通过json向php服务端提交订单,php服务端处理订单后,通过json返回结果给android客户端。正常来讲,php服务端在处理订单过程中,需要与mysql数据库交互,这里为了简单起见,暂时省掉mysql。
通信格式
首先,需要定下客户端与服务端之间通信格式,如下表
android客户端
    客户端与服务端采用json数据格式通信,同时采用http通信协议交互,采用post方式提交结果。同时还要注意一点,与web服务器通信的过程需要另开辟一个线程进行数据的获取,这样可以防止获取程序失败之后,主线程还可以运行,我开始实验的时候没有注意到这一点,由于通信失败造成了程序停止运行。
    同时由于需要网络通信,所以需要在androidmanifest.xml中添加如下权限语句
程序的构造图比较简单,只有一个mainactivity.java。
运行效果为
mainactivity.java内容如下
package com.lygk.jsontest;import java.io.bufferedreader;import java.io.inputstreamreader;import java.util.arraylist;import java.util.list;import org.apache.http.httpentity;import org.apache.http.httpresponse;import org.apache.http.client.httpclient;import org.apache.http.client.entity.urlencodedformentity;import org.apache.http.client.methods.httpget;import org.apache.http.client.methods.httppost;import org.apache.http.impl.client.defaulthttpclient;import org.apache.http.message.basicnamevaluepair;import org.apache.http.params.coreconnectionpnames;import org.apache.http.protocol.http;import org.json.jsonobject;import com.example.jsontest.r;import android.app.activity;import android.os.bundle;import android.os.handler;import android.os.message;import android.util.log;import android.view.menu;import android.view.menuitem;import android.view.view;import android.view.view.onclicklistener;import android.widget.button;import android.widget.toast;public class mainactivity extends activity { private static final string tag=lygk; button btnrequest; protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); log.i(tag, 启动程序 ); btnrequest = (button)findviewbyid(r.id.btnrequest); //绑定事件源和监听器对象 btnrequest.setonclicklistener(new buttonrequestlistener()); } //内部类,实现onclicklistener接口 //作为第二个按钮的监听器类 class buttonrequestlistener implements onclicklistener { public void onclick(view v) { log.i(tag, 按钮按下 ); startrequestfromphp(); log.i(tag, 执行完毕 ); } } private void startrequestfromphp() { //新建线程 new thread(){ public void run(){ try { sendrequest(); } catch (exception e) { e.printstacktrace(); } } }.start(); } private void sendrequest(){ //通过httpclient类与web服务器交互 httpclient httpclient = new defaulthttpclient(); //定义与服务器交互的地址 string serverurl = http://www.bigbearking.com/study/guestrequest.php; //设置读取超时,注意connection_timeout和so_timeout的区别 httpclient.getparams().setparameter(coreconnectionpnames.connection_timeout, 5000); //设置读取超时 httpclient.getparams().setparameter(coreconnectionpnames.so_timeout, 5000); //post方式 httppost httprequst = new httppost(serverurl); //准备传输的数据 list params = new arraylist(); params.add(new basicnamevaluepair(cmdid, 1)); params.add(new basicnamevaluepair(cusername, lygk)); params.add(new basicnamevaluepair(cordername, apple)); params.add(new basicnamevaluepair(cordernum, 2)); try{ //发送请求 httprequst.setentity(new urlencodedformentity(params, http.utf_8)); //得到响应 httpresponse response = httpclient.execute(httprequst); //返回值如果为200的话则证明成功的得到了数据 if(response.getstatusline().getstatuscode() == 200) { stringbuilder builder = new stringbuilder(); //将得到的数据进行解析 bufferedreader buffer = new bufferedreader(new inputstreamreader(response.getentity().getcontent())); //readline()阻塞读取 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()); //通过得到键值对的方式得到值 int cmdid = jsonobject.getint(cmdid); string sresult = jsonobject.getstring(sresult); string susername = jsonobject.getstring(susername); int sresultpara = jsonobject.getint(sresultpara); log.i(tag, 读取到数据 ); log.i(tag, requestresult:+sresult); log.i(tag, username:+susername); //在线程中判断是否得到成功从服务器得到数据 } else{ log.e(tag, 连接超时 ); } }catch (exception e) { e.printstacktrace(); log.e(tag, 请求错误 ); log.e(tag, e.getmessage()); } return ; }}
web服务端源码
guestrequest.php内容:
$cmdid, 'susername' => $username, 'sresult'=>$result, 'sresultpara' =>$resultpara ); //将数组转成json格式进行传递 $strr = json_encode($arr); } else { $result = 'success'; $resultpara = 1; //将数据存储到数据中 $arr = array( 'cmdid' => $cmdid, 'susername' => $username, 'sresult'=>$result, 'sresultpara' =>$resultpara ); //将数组转成json格式进行传递 $strr = json_encode($arr); } echo($strr);?>
运行软件,点击“发送请求”按钮后,从logcat可以看到运行信息,web服务器已经成功响应处理了android客户端发送的请求。
结尾
    本章主要介绍了android客户端与web服务端的交互,贴的源码比较多,发现讲的原理少,其中个中细节,请君自行品味查阅。android客户端源码,点此下载
/*****************************************************************************************************
*鲁阳高科工作室
*网       址:www.bigbearking.com
*商务合作qq:1519190237
*业 务 范 围:网站建设、桌面软件开发、android\ios开发、图像影视后期处理、pcb设计
****************************************************************************************************/
其它类似信息

推荐信息