- 浏览: 576242 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
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 2344简单的demo,屏幕上下滑动翻转View,类似Android ... -
3D编程基础数学之旋转及在Android中的应用
2012-02-10 00:11 0最近因为兴趣,看了一些3D编程的书,有种感觉就是写这些书的作者 ... -
Android中屏幕Density对BitmapDrawable的影响
2011-07-08 21:44 7843很早之前写的文章了,发在这里记录一下。 在之前的 ... -
Android程序与Javascript的交换
2010-04-16 21:40 0hello! -
Android Services使用示例
2010-01-12 16:50 14042Android开发中,当需要创建在后台运行的程序的时候,就要 ... -
Android ListView常用用法
2009-12-03 20:56 36597ListView是比较常用的控件,但一直都觉得创建ListVi ... -
Android View添加 Listener 小技巧示例
2009-12-02 15:35 9788在开发中为控件添加Listener是非常常见的工作,最简单的添 ... -
Android Gesture 手势识别使用实例
2009-10-20 11:56 10150很高兴能在Android1.6的sdk看到手势识别这一 ... -
Android第二个游戏 DragonFeed(勇者喂恶龙)
2009-10-12 17:57 7960这是参加学校一个小比赛的参赛游戏,之前一直在忙 认证考试和项目 ... -
Android 震动示例--心跳效果
2009-10-02 23:58 7671正在开发第二个游戏,计时就要结束的时候,为了营造紧张的气氛, ... -
Android adb的使用略解
2009-09-30 16:08 40217安卓网的一个帖子,写得不错,记下来 ADB全称Android ... -
Android游戏开发之连连看算法
2009-09-29 00:36 10346因为有朋友在站内信中问到连连看的具体算法,所以我就把算法pos ... -
android游戏开发之选关画面
2009-09-21 15:44 3974在游戏开发中,往往要提供选关的页面,选择关卡可以简单地使用li ... -
Android重力感应Demo
2009-09-11 23:33 13986android中的很多游戏的游戏都使用了重力感应的技术,但其a ... -
Android游戏开发之爆炸效果
2009-09-02 00:29 18349在做Android游戏MagicBubble开发的时候 ... -
Android 的第一个游戏
2009-08-18 08:48 7869学了android1个多月,做了一款连连看游戏,上了andro ... -
Android canvas的save()和restore()用法
2009-08-05 12:21 19829在读Android SDK里面的samples里面游戏的时候, ... -
Android 2d物理引擎Box2d的使用示例
2009-08-04 09:06 14195Box2d是一个很出名的2d物理引擎,大家可以google之。 ... -
利用Handler更新Android UI的另一种方法
2009-07-29 11:28 11843文字程序很简单,一个View,一个Activity,利用han ... -
android布局学习利器-Hierarchy Viewer
2009-07-27 18:17 8068Hierarchy Viewer 帮你分析应用程序UI布局 ...
相关推荐
游戏开发中客户端与服务器端数据的传输, URL url = new URL(path); //创建一个Url对象 //得到打开的链接对象 HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //设置请求超时与请求...
java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发 小游戏 经典游戏 游戏源码 课程设计 java游戏开发...
系统包括PC服务器端和Android游戏客户端两大部分。客户端实现了注册、登录、游戏房间选择、多人斗地主等功能,而服务器端则可以同时接受多个用户的连接请求并可以对用户信息进行存储和管理。客户端和服务器间使用...
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 Web Game App高级编程之旅 从一个空白的HTML网页开始 最后将收获多人在线游戏 有丰富多彩的图像 声音 动画等 开发必需的一些知识和技巧 即使你以前没有游戏开发和服务器端编程的经验 ...
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...
Andjong 麻将游戏的源代码,是一个日本的开源项目,注释很多很详细(不过是日文的^_^),对麻将类游戏开发有较大的帮助。
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...
项目有现在最流行的2D 游戏开发软件 CocosCreater 开发。 可发布到 iOS Android H5 端。 项目类型为经典的闹铃系统。 软件开发设计:PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python...
非常难得的UnitySetup-Android-2019.2.0,用于开发安卓端3D游戏。由于被墙,国内无法在官方服务器下载,特意分享。 用于Unity3d 2019所有版本,包括64位和32位完美通过,特说明:使用者需要具备安卓SDK和ADK配置基本...
TCP服务器端 478 13.1.3 使用Socket进行通信 479 13.1.4 加入多线程 483 13.2 使用URL访问网络资源 488 13.2.1 使用URL读取网络资源 489 13.2.2 使用URLConnection 提交请求 490 13.3 使用HTTP访问...
这对于开发需要高并发性能的应用程序(如服务器端应用、网络应用等)非常重要。 自动内存管理(垃圾回收): Java具有自动内存管理机制,通过垃圾回收器自动回收不再使用的对象,使得开发者不需要手动管理内存,...
C#通常用于开发Windows桌面应用程序、Web应用程序、移动应用程序以及游戏开发等领域。C#是.NET框架的一部分,这意味着它可以与其他.NET语言(如Visual Basic .NET、F#等)以及.NET框架中的各种库和工具进行交互使用...