MonthJune 2011

WP7 程序部署错误代码(Error Code)详解

摘要:详解WP7错误码的含义,并提供几个常见Error Code的Workaround。

      做开发的童鞋都懂得,做什么都得先应付各种Development Error,Windows Phone也不例外,无奈在WP7的MSDN文档里压根没找到这些错误码的解释…….

     当然对于用破解软件的童鞋,就更伤不起了,只是装个游戏,难道还得学学怎么搞Visual Studio这么重的东西吗?!

来看看这些Error Code吧:

Error Code 错误详解和Workaround
0x8973180E Zune还没有安装。请安装最新版本的Zune。下载地址:http://www.zune.net/zh-HK/
0x8973180F Zune软件版本不是最新。请在http://www.zune.net/zh-HK/下载最新版
0×89731810 错误的设备配置. 重装Visual Studio 2010 Express for Windows Phone可以解决此问题。
0×89731811 Zune software没有打开.。确认运行了Zune之后再次尝试。
0×89731812 连接硬件设备出错。 确定设备正确链接,并且不处于锁屏状态。
0×89731813 程序启动失败。请确定设备已经注册并解锁,如何注册的传送门http://go.microsoft.com/fwlink/?LinkId=195284.
0×81030110 安装程序失败。发生运行时错误。在WMAppManifest.xml文件中的<Capabilities>中有项目设定错误。(这个没遇到过,看MSDN的讨论版大家的Workaround都没有成功的样子……)
0×81030111 确保程序在部署前被完整卸载。(我遇到一次,似乎是我以前装过某App,之后用Reset方式清过所有数据,再装相同App的时候出现的。Workaround是当出现此错误,在WP7上会出现以前App的图标,黑色块的,长按之后Remove就可以了)
0×81030118 程序安装失败。设备未进行开发者解锁。运行Windows Phone Developer Tools里的Developer Register工具进行开发者注册。(注册分为普通开发者注册和学生开发者注册,普通开发者注册99$/年,需要美国社保号,现在大陆还未开放注册,本人通过Rocky搞到一个免费的美国学生开发者账号,以后会提交应用的,有意者也可联系我,共同开发哈)
0×81030119 不能再部署程序了。你已经到达了本账号部署的最多部署限制,请卸载以前部署的程序来完成部署。 (我的学生开发者账号最多只能部署三个程序!)

本文只做WP7程序部署的错误码详解,刚好碰到了就发上来了,之后做程序审核提交的时候还会把碰到的问题一并发出来的。

Android REST Client架构实践 第一篇

摘要:今年一直断断续续在做一个基于昊哥的一套很重的REST API的Android Client,其实也是第一次做Android,而且是按照Google I/O 2010 – Android REST client applications(请自行翻墙:)的指导做一个REST的客户端,遇到各种问题所以特地记录一下。第一篇就概述一下:

1.REST API以及我所调用的的REST API的特点

2.Google I/O大会上提出的Android REST Client的建议架构

一、关于REST API

REST架构的优势,广泛应用这些废话就不说了,网上的讨论都已经够多了,有兴趣的Google之吧,而REST的核心概念,解析这些我的另一个系列《REST学习实践》会陆续添加,这里就不赘述了。简单的说就是:1.用Url表示资源 2.对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法

二、从Dev角度总结我所调用的REST API的特点

1.提供两种Data Formats,JSON和XML,我用的JSON,插播一段JSON简介吧:

   JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。

   下面是段JSON代码

   1: {

   2:     "skillz": {

   3:         "web": [{

   4:             "name": "html",

   5:             "years": "5"

   6:         },

   7:         {

   8:             "name": "css",

   9:             "years": "3"

  10:         }],

  11:         "database": [{

  12:             "name": "sql",

  13:             "years": "7"

  14:         }]

  15:     }

  16: }

使用JSON的原因主要是JSON的解析速度据称比XML快10倍,其实Javascript上用的更多一些,有比较好的支持。

2.Authentication 权限

由于REST本身并没有标准,所以似乎并没有对权限这块做什么规定,在一些需要登录使用的API上我们用的是一套类似于OAuth的授权机制:

     a.向REST Service请求Login

     b.取得一个临时Token

     c.在一段时间内在HTTP Header带Token请求受保护的内容

至于Token的生成和更新就是Server端的工作了。

3.REST Request Url内嵌查询表达式

昊哥的REST Service提供了一套强大的查询表达式,类似于一个简单的编译器,Client可以在Request中带类似“q=AND(keyword:智能手机)(NOT(keyword:Nokia))(price:<1000)(city:~湖北~武汉)”来查询“在武汉1000元以下不是Nokia的智能手机”.

那么在这套REST API当中一个标准请求的Example就是

http://www.restexample.com/items/@all?c={PAGEINDEX}&max-results={PAGESIZE}&q={QUERYEXPRESSION}&orderby={ORDERBY}&partial={WANTEDFIELDS}

三、Google I/O 2010 Session上建议的Android REST Client App的架构

第一篇的话我就先抛个引子吧,上两个Session里的架构示例:
1.错误的范例
Android_rest_wrong
这其实还算是一般HTTP Client写法中比较好的,因为另开线程去处理HTTP Client,不会阻塞UI线程,但缺点也一样突出:
     Android OS可能会随时干掉这个Activity,比如在运行APP的时候突然接个电话就有可能被杀死,那么数据没有持久化的话,只能再次请求,这样糟糕的体验加过多流量足以让用户跟你的APP说滚蛋了……..
2.最佳范例
Android_rest
这是Google I/O上主推的建议Android REST Client,它的优点自然是解决了上面例子的缺点了,但Google不太厚道呀,说了自己的Android 上GMail,GReader等都是用这套架构完成的,却没给Demo代码,这里面用到的IntentService和ResultReceiver的文档支持也很少,搞得各大论坛上都有人讨论但实现的方案倒不多,希望本系列能给出一个比较完整的解决方案吧~~
 
本文就完了,下一篇主要对比Google I/O Session上的Android REST Client架构……….
 

PS:关于昊哥很重的WCF REST Service,有兴趣的可传送至昊哥的Blog文章我的WCF4 Rest Service及Entity Framework with POCO之旅