登录
首页 » Android » 从 Android 中调用 PHP web 服务

从 Android 中调用 PHP web 服务

于 2022-02-05 发布 文件大小:1.61 MB
0 175
下载积分: 2 下载次数: 1

代码说明:

翻译 maninwest@Codeforge 作者:sandeepten910@CodeProject在这里,我尝试使用 PHP 开发一个 web 服务,把它放在远程服务器上并使用 Android app 进行调用。该 Web 服务可以是任何东西,可以是一个简单的计算或者数据库应用。我在这里展示的是最简单的类似加法的操作,就像从应用程序中传递 2 个数, PHP web 服务需要接受他们并进行计算,再返回结果给应用。这里我使用免费的 webhost 来托管web 服务。详情可以使用 SOAP (简单对象访问协议) 进行, 通信完全是独立于平台的,这意味着这个 WEB 服务可以从应用程序中调用。能做到这样是因为通信是通过XML 进行的,当客户端发送请求时,请求会采用 XML 格式且其条目会在  UDDI 寄存器中检查,且指向特定 web 服务并执行,最后对客户端响应。示意图如下: 让我们来看一个例子,在例子中,我们从 Android 应用中对托管在web 服务器上的一个 webservice 进行调用。我们在这里使用简单的示例应用,返回食材的价格。我需要使用一个库工具 nusoap,你可以在这里下载,它有两个文件夹 samples 和 lib…Lib 对我们很重要。现在,注册一个你想要的 web 主机。访问主机,将  nusoap 的 lib 目录放在 public_html 目录中,为web 服务设置环境。 现在,需要以PHP 写适当

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • 微信公众平台开发模式(JAVA) SDK/微信app
    【核心代码】package com.gson;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.util.Date;import java.util.Properties;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletInputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import com.gson.bean.Articles;import com.gson.bean.InMessage;import com.gson.bean.OutMessage;import com.gson.bean.TextOutMessage;import com.gson.inf.MessageProcessingHandler;import com.gson.util.Tools;import com.gson.util.XStreamFactory;import com.thoughtworks.xstream.XStream;/** * 请求拦截 * * @author GodSon * */public class WeChatFilter implements Filter { private final Logger logger = Logger.getLogger(WeChatFilter.class); private String _token; private String conf = "classPath:wechat.properties"; private String defaultHandler = "com.gson.inf.DefaultMessageProcessingHandlerImpl"; private Properties p; @Override public void destroy() { logger.info("WeChatFilter已经销毁"); } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; Boolean isGet = request.getMethod().equals("GET"); String path = request.getServletPath(); String pathInfo = path.substring(path.lastIndexOf("/")); if (pathInfo == null) { response.getWriter().write("error"); } else { _token = pathInfo.substring(1); if (isGet) { doGet(request, response); } else { doPost(request, response); } } } private void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setCharacterEncoding("UTF-8"); response.setContentType("text/xml"); OutMessage oms = new OutMessage(); ServletInputStream in = request.getInputStream(); // 转换微信post过来的xml内容 XStream xs = XStreamFactory.init(false); xs.alias("xml", InMessage.class); String xmlMsg = Tools.inputStream2String(in); logger.debug("输入消息:[" xmlMsg "]"); InMessage msg = (InMessage) xs.fromXML(xmlMsg); // 获取自定消息处理器,如果自定义处理器则使用默认处理器。 String handler = p.getProperty("MessageProcessingHandlerImpl"); if (handler == null) handler = defaultHandler; try { // 加载处理器 Class clazz = Class.forName(handler); MessageProcessingHandler processingHandler = (MessageProcessingHandler) clazz.newInstance(); // 取得消息类型 String type = msg.getMsgType(); Method mt = clazz.getMethod(type "TypeMsg", InMessage.class); oms = (OutMessage) mt.invoke(processingHandler, msg); if (oms == null) { oms = new TextOutMessage(); ((TextOutMessage) oms).setContent("系统错误!"); } setMsgInfo(oms,msg); } catch (Exception e) { logger.error(e); oms = new TextOutMessage(); ((TextOutMessage) oms).setContent("系统错误!"); try { setMsgInfo(oms,msg); } catch (Exception e1) { logger.error(e); } } // 把发送发送对象转换为xml输出 xs = XStreamFactory.init(true); xs.alias("xml", oms.getClass()); xs.alias("item", Articles.class); String xml = xs.toXML(oms); logger.debug("输出消息:[" xml "]"); response.getWriter().write(xml); } private void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { String signature = request.getParameter("signature");// 微信加密签名 String timestamp = request.getParameter("timestamp");// 时间戳 String nonce = request.getParameter("nonce");// 随机数 String echostr = request.getParameter("echostr");// // 验证 if (Tools.checkSignature(_token, signature, timestamp, nonce)) { response.getWriter().write(echostr); } } private void setMsgInfo(OutMessage oms,InMessage msg) throws Exception { // 设置发送信息 Class outMsg = oms.getClass().getSuperclass(); Field CreateTime = outMsg.getDeclaredField("CreateTime"); Field ToUserName = outMsg.getDeclaredField("ToUserName"); Field FromUserName = outMsg.getDeclaredField("FromUserName"); ToUserName.setAccessible(true); CreateTime.setAccessible(true); FromUserName.setAccessible(true); CreateTime.set(oms, new Date().getTime()); ToUserName.set(oms, msg.getFromUserName()); FromUserName.set(oms, msg.getToUserName()); } /** * 启动的时候加载wechat.properties配置 可以在过滤器配置wechat.properties路径 */ @Override public void init(FilterConfig config) throws ServletException { String cf = config.getInitParameter("conf"); if (cf != null) { conf = cf; } String classPath = this.getClass().getResource("/").getPath().replaceAll("%20", " "); conf = conf.replace("classPath:", classPath); p = new Properties(); File pfile = new File(conf); if (pfile.exists()) { try { p.load(new FileInputStream(pfile)); } catch (FileNotFoundException e) { logger.error("未找到wechat.properties", e); } catch (IOException e) { logger.error("wechat.properties读取异常", e); } } logger.info("WeChatFilter已经启动!"); }}
    2014-01-21下载
    积分:1
  • electronic-organ-Android
    这是一个很经典的关于电子琴的作业,是学习安卓的一个很好的例程,使我们上课的时候老师让我们做的,可以运行的。(This is a classic on the keyboard operation, Andrews is a good learning routines, so that our class when the teacher asked us to do, you can run.)
    2020-06-30 09:20:01下载
    积分:1
  • android_usb_serial-master
    android host usb to serial converter example
    2013-10-21 12:35:16下载
    积分:1
  • 蓝牙智能车android遥控程序
    本程序的功能是通过蓝牙遥控智能车的运动轨迹,蓝牙模块放在智能车上,并为其接通电源。在安卓程序界面中有5个控制按钮,分别是实现对玩具车的向前、左转、右转、后退和停止的控制。其中难度较大的是双向控制,即实现每个设备都可以操控另外一个设备的功能,此时就需要有蓝牙功能的电脑或者另外的一部android手机来完成测试。
    2022-12-06 05:35:03下载
    积分:1
  • 智能家居app源代码
    基于网络数据库的智能家居APP 开发,拥有完整的源代码,只需修改IP就可以进行使用!! 网络通信使用HTTP通讯进行,首页面有线程进行刷新,能够每隔0.5s刷新一次! 各页面跳转正常,界面设计属于清新模式,图文并茂!!
    2023-01-16 08:00:04下载
    积分:1
  • andriod
    有关于安卓的景物实例,主要介绍旅游景点的浏览页面。(There are examples on the scene Andrews)
    2020-12-27 16:59:03下载
    积分:1
  • Android 使用Dialog组件制作登陆框特效
    Android 使用Dialog组件制作的登陆框特效,这是一个带动画效果的用户登录界面特效,运行后,登录框由上到下弹跳若干次后,慢慢停下来,用户可输入帐号、密码进行登录,加入动画效果,可让你的APP界面更活跃,有些用户喜欢带动画的窗口。   异常处理部分也简单弄了下:Notice.show(this, "程序出现异常: " + getException(e), Toast.LENGTH_LONG);   这个登录框的弹跳效果,是借鉴了一个弹球游戏中的弹跳模块,因此看上去效果和弹球的弹跳很相似哦。
    2022-03-08 09:03:15下载
    积分:1
  • 人脸检测
    在安卓系统中实现此程序检测人脸图片中 ; 这是一个简单的代码与 android 平台。
    2022-05-24 03:40:04下载
    积分:1
  • ListView中item使用ViewPager
    应用背景 ListView中的Item是可以左右滑动的ViewPager,有需要的可以借鉴 关键技术自定义ListView中的Item在加载条目的时候实例化左右滑动的ViewPager,解决了滑动冲突监听,复写OnTouchListener
    2022-03-26 07:07:16下载
    积分:1
  • filemanager04
    简易的Filemanager,有listview和gridview,同时可以开启档案。(Simple Filemanager, a listview and gridview, and can open the file.)
    2011-09-26 13:35:56下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载