- 浏览: 580255 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
hxlniada:
[color=darkred][/color][size=sm ...
利用Handler来更新android的UI -
jack_ye:
...
检测Android中触摸屏手势的动作与坐标 -
z278013421:
Android Services使用示例 -
东方vs不败:
写的不错,挺好的
利用Handler来更新android的UI -
liangxping:
就是双缓存机制而已。
Android中SurfaceView的使用示例
首先我不知道这篇文章发到Android开发板块是否适合的,因为只部分内容大多数是有关Google appEngine的,但因为这是AppEngine和Android的配合开发,故对Android开发者也有一定的参考意义,故发到这里来了。
其次,在写文章前先谢谢UCWeb Android的产品经理huang,谢谢他的赏识,虽然最后因为一些个人原因我没留在UC,但从笔试和面试的过程中,我发觉UC真是一家严谨、惜才的公司,搞Android的朋友如果有兴趣,可以考虑应聘一下UC的社招。
OK,进入正题!
在做游戏开发的时候,很多游戏都会提供一个全球分数排名的的功能,这就需要使用服务器了,当然,你可以选择搭建自己的服务器,但从成本,稳定性和开发周期上看,我认为Google AppEngine是个很不错的选择,现在Google AppEngine关于Python的参考资料比较详尽,Java的就比较少,所以我把我写的小Demo放上来,做抛砖引玉之用,因为我也是初学者,所以demo一切从简,大侠请不要见笑哦!
Demo1:对象的存储:
步骤1.定义JavaBean:
package com.ray.test; import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; //标记对象可以持久化 @PersistenceCapable(identityType = IdentityType.APPLICATION) public class Employee { //标记主键,作以后查询之用 @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private String firstName; @Persistent private String lastName; @Persistent private Date birthDate; public Employee(String firstName, String lastName, Date birthDate) { this.firstName = firstName; this.lastName = lastName; this.birthDate = birthDate; } public String getFirstName() { return firstName; } }
步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):
package com.ray.test; import java.io.IOException; import java.util.Date; import javax.jdo.PersistenceManager; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @SuppressWarnings("serial") public class HelloServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp)throws IOException { resp.setContentType("text/plain"); Employee e = new Employee("Alfred", "Smith", new Date()); //获取用以存取对象的PersistenceManager PersistenceManager pm = PMF.get().getPersistenceManager(); try { //存储对象 resp.getWriter().println("saving object!"); pm.makePersistent(e); }catch(Exception ex){ resp.getWriter().println("cannot persistent!"); ex.printStackTrace(); } finally { pm.close(); } try{ //再次获取用以存取对象的PersistenceManager pm = PMF.get().getPersistenceManager(); //由主键检索对象,Alfred之前被定义为主键的 Employee newE = pm.getObjectById(Employee.class, "Alfred"); //读取新对象的信息检测对象检索是否成功 resp.getWriter().println("Employee:"+newE.getFirstName()); }catch(Exception ex){ ex.printStackTrace(); resp.getWriter().println("cannot get data!"); pm.close(); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException { this.doGet(req, resp); } }
其中PMF类的代码如下,没看错应该是个单例模式:
package com.ray.test; import javax.jdo.JDOHelper; import javax.jdo.PersistenceManagerFactory; public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional"); private PMF() {} public static PersistenceManagerFactory get() { return pmfInstance; } }
Demo2.使用Google 账户认证服务:
package com.ray.test; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; public class GoogleAccount extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //创建用户服务 UserService userService = UserServiceFactory.getUserService(); String thisURL = req.getRequestURI(); //通过请求对象的 getUserPrincipal() 方法测试用户是否使用 Google 帐户登录 if (req.getUserPrincipal() != null) { //如果有登录,则创建Login地址 resp.getWriter().println("<p>Hello, " + req.getUserPrincipal().getName() + "! You can <a href=\"" + userService.createLogoutURL(thisURL) + "\">sign out</a>.</p>"); } else { //如果没有登录,则创建Login地址 resp.getWriter().println("<p>Please <a href=\"" + userService.createLoginURL(thisURL) + "\">sign in</a>.</p>"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
手机访问登录效果:
需要特别指出的是,Google通过在web.xml里面配置权限来区分登录者的权限,可以用下面的代码来配置安全常量从而划定只能由admin访问的区域---admin路径下的所有页面:
<security-constraint> <web-resource-collection> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
参考资料:
http://code.google.com/intl/zh-CN/appengine/docs/java/overview.html
评论
用的移动号码
+86135....
楼主是什么时候注册的
换个手机,或者是换别的运营商的手机,我刚刚用联通的手机是可以收到的.
貌似可以填一个报告单,跟Google说收不到,对方回处理的
终于等来了,以为被GOOGLE忘记了
Your Google App Engine Account has been enabled!
Hello,
You're receiving this email because you indicated you'd had some problems
verifying your Google App Engine account using SMS. We just wanted to let
you know we've enabled your account--you should be able to create
applications now!
To start creating applications with Google App Engine, simply follow this
link:
https://appengine.google.com/
Thanks!
The Google App Engine Team
用的移动号码
+86135....
楼主是什么时候注册的
换个手机,或者是换别的运营商的手机,我刚刚用联通的手机是可以收到的.
貌似可以填一个报告单,跟Google说收不到,对方回处理的
用的移动号码
+86135....
楼主是什么时候注册的
换个手机,或者是换别的运营商的手机,我刚刚用联通的手机是可以收到的.
用的移动号码
+86135....
楼主是什么时候注册的
步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):
这里bean的数据是从google服务器那边取得的吗?
多个用户取得的都是一样的值吗?
是从服务器取到的,多个用户取到的是一样的,当然,你可以加权限,决定什么样的用户获取什么样的数据!
步骤2.存取Bean(可以写在Servlet的doGet()或者doPost()里面):
这里bean的数据是从google服务器那边取得的吗?
多个用户取得的都是一样的值吗?
大家一起进步啊,gae java方面的资料太少了,另外就是gap近来大有墙的趋势,不过如果是面对国外用户的android应用的话,gae还是可以使用的!
发表评论
-
类似Chome的翻转效果
2012-09-18 23:14 2418简单的demo,屏幕上下滑动翻转View,类似Android ... -
3D编程基础数学之旋转及在Android中的应用
2012-02-10 00:11 0最近因为兴趣,看了一些3D编程的书,有种感觉就是写这些书的作者 ... -
Android中屏幕Density对BitmapDrawable的影响
2011-07-08 21:44 7910很早之前写的文章了,发在这里记录一下。 在之前的 ... -
Android程序与Javascript的交换
2010-04-16 21:40 0hello! -
Android Services使用示例
2010-01-12 16:50 14156Android开发中,当需要创建在后台运行的程序的时候,就要 ... -
Android ListView常用用法
2009-12-03 20:56 36772ListView是比较常用的控件,但一直都觉得创建ListVi ... -
Android View添加 Listener 小技巧示例
2009-12-02 15:35 9885在开发中为控件添加Listener是非常常见的工作,最简单的添 ... -
Android Gesture 手势识别使用实例
2009-10-20 11:56 10224很高兴能在Android1.6的sdk看到手势识别这一 ... -
Android第二个游戏 DragonFeed(勇者喂恶龙)
2009-10-12 17:57 8145这是参加学校一个小比赛的参赛游戏,之前一直在忙 认证考试和项目 ... -
Android 震动示例--心跳效果
2009-10-02 23:58 7723正在开发第二个游戏,计时就要结束的时候,为了营造紧张的气氛, ... -
Android adb的使用略解
2009-09-30 16:08 40297安卓网的一个帖子,写得不错,记下来 ADB全称Android ... -
Android游戏开发之连连看算法
2009-09-29 00:36 10512因为有朋友在站内信中问到连连看的具体算法,所以我就把算法pos ... -
android游戏开发之选关画面
2009-09-21 15:44 4068在游戏开发中,往往要提供选关的页面,选择关卡可以简单地使用li ... -
Android重力感应Demo
2009-09-11 23:33 14088android中的很多游戏的游戏都使用了重力感应的技术,但其a ... -
Android游戏开发之爆炸效果
2009-09-02 00:29 18576在做Android游戏MagicBubble开发的时候 ... -
Android 的第一个游戏
2009-08-18 08:48 8050学了android1个多月,做了一款连连看游戏,上了andro ... -
Android canvas的save()和restore()用法
2009-08-05 12:21 19957在读Android SDK里面的samples里面游戏的时候, ... -
Android 2d物理引擎Box2d的使用示例
2009-08-04 09:06 14305Box2d是一个很出名的2d物理引擎,大家可以google之。 ... -
利用Handler更新Android UI的另一种方法
2009-07-29 11:28 11931文字程序很简单,一个View,一个Activity,利用han ... -
android布局学习利器-Hierarchy Viewer
2009-07-27 18:17 8154Hierarchy Viewer 帮你分析应用程序UI布局 ...
相关推荐
《Android游戏开发:基于SurfaceView的坦克大战》 在Android平台上的游戏开发中,SurfaceView是一种常见的用于处理连续动画和游戏画面更新的视图组件。本项目“Android游戏(含服务器部分)”聚焦于利用SurfaceView...
本教程将深入探讨Android Socket编程的基本概念、客户端与服务器端的实现以及相关源码解析。 一、Socket基本概念 Socket,也被称为套接字,是网络通信中的一个重要接口,它为两台设备提供双向通信的通道。在Android...
在Android手机游戏开发中,服务器端扮演着至关重要的角色,它是连接客户端(即手机游戏应用)与游戏逻辑、数据存储的核心桥梁。本资源提供的是一个完整的Android手机游戏服务器端Server的源代码,对于理解游戏服务器...
在Android游戏开发中,3D游戏开发通常使用Java语言,因为它是Android SDK的主要编程语言。开发者可能利用了OpenGL ES(OpenGL for Embedded Systems)这一图形库,它是Android系统支持的用于2D和3D图形渲染的API。...
2.6.2 服务器端 57 2.6.3 客户端 58 2.7 蓝牙通信 59 2.7.1 蓝牙通信的基本知识 60 2.7.2 聊天案例概览 60 2.7.3 聊天案例的开发过程 62 2.8 本章小结 75 第3章 初识opengl es 2.0 77 3.1 ...
在本项目中,我们探索了如何使用Android设备作为客户端,通过Qt应用程序作为服务器端,实现远程控制个人计算机(PC)的功能。这个系统允许用户通过他们的Android手机执行一系列在PC上的操作,增强了移动设备的实用性...
"精通Android游戏开发"这个主题涵盖了从基础到高级的各类知识点,旨在帮助开发者构建高质量、高性能的游戏应用。Android游戏开发不仅涉及编程语言,如Java或Kotlin,还包括图形设计、物理模拟、音频处理等多个方面。...
《Android游戏开发宝典》是一本深度探讨Android游戏开发的专业书籍,其附带的光盘包含书中所有示例项目的源代码,这对于学习者来说是一份极其宝贵的资源。这份压缩包文件,名为“源代码”,正是这些示例项目的集合,...
在游戏开发中,服务器端的角色至关重要。它可能负责游戏状态的同步,确保多玩家之间的交互公平且一致。此外,服务器还可能存储和管理玩家数据,例如分数、成就等,以及处理游戏内的经济系统,如虚拟货币交易。 关于...
书籍深入探讨了Android游戏开发的关键技术,如Java或Kotlin语言的应用、Android SDK的使用、OpenGL ES图形渲染、游戏网络通信等,旨在帮助开发者掌握在Android平台上构建高性能游戏的方法。 ### Unity3D游戏开发 ...
在本项目中,"基于Android的网络游戏开发——易扑克网络...通过这个项目,开发者可以深入了解Android游戏开发的各个方面,从客户端到服务器端,从基础架构到用户体验,从网络通信到游戏逻辑,都是学习和实践的好机会。
在本文中,我们将深入探讨如何使用 Netty 4.0.31.Final 版本构建 Android 客户端和服务器端应用程序。 首先,Netty 提供了一种简化网络编程的方式,它通过非阻塞 I/O 和 Channel 抽象来处理并发连接。在 Android 上...
不过在这个项目中,JavaScript并未直接用于原生应用开发,而是可能被用作与服务器端交互或实现特定功能的辅助脚本。 在实际的项目开发过程中,开发者首先需要设计应用的架构。对于24点游戏,可能包含主界面、游戏...
在本文中,我们将深入探讨如何在Android平台上实现服务器端和客户端的Socket通讯,以及如何创建9999端口进行数据交互。 首先,我们需要理解Socket的基本概念。Socket在计算机网络中是一种进程间通信机制,它提供了...
游戏开发中客户端与服务器端数据的传输, URL url = new URL(path); //创建一个Url对象 //得到打开的链接对象 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求超时与请求...
《类大富翁的Android游戏开发详解》 在Android平台上,开发一款类大富翁的游戏是一种有趣且富有挑战性的实践。大富翁游戏的核心玩法包括掷骰子移动、购买地产、收取租金等,这些都需要通过编程来实现。下面,我们将...
本资料详细介绍了如何在Android平台上使用Socket进行网络编程,并通过具体的示例代码展示了聊天室的开发过程,包括服务器端和Android客户端的开发。 #### 二、服务器端程序开发 服务器端程序通常运行在一台PC机上...
Andjong是一款基于Android平台的开源麻将游戏,其源代码提供了丰富的学习资源,对于想要深入了解Android游戏开发,尤其是麻将类游戏开发的开发者来说,是一个不可多得的实践案例。这款项目由日本开发者贡献,尽管...
- 对战匹配、好友系统和实时聊天功能则需要服务器端的支持。 总之,分析并学习这款Android中国象棋游戏的源代码,不仅可以掌握Android开发的基本技术,还能深入了解游戏开发的算法设计和优化策略。无论是对于初学...