关于黑莓开发中的local i18n的冲突问题

昨天早上醒来,有人邮件我说,客户端报一个 错误 Uncaught Exception:java.lang.Error

我想,又是什么黑莓的问题吧,所以就草草的回复了这个事情,后来发现,报告的人挺多的,而且都是安装了新浪微博的最新的黑莓客户端导致的,这下紧张了,记得看《创业家》里面有一句话,”永远不要和(新浪)微博竞争“,这回不但竞争了,还TMD冲突了,这下玩完儿了。

火速解决这个问题!首先是在模拟器上测试,立刻发现是

import net.rim.device.api.i18n.ResourceBundle;
...
public static ResourceBundle sm_local = ResourceBundle.getBundle(localResource.BUNDLE_ID, localResource.BUNDLE_NAME);
public static final String[] fsm_apnListString =
{
	sm_local.getString(yblocalResource.APN_LIST_NULL),
	sm_local.getString(yblocalResource.APN_LIST_CMNET) 	+ " cmnet",
	sm_local.getString(yblocalResource.APN_LIST_UNINET) 	+ " uninet",
	sm_local.getString(yblocalResource.APN_LIST_3GNET) 	+ " 3gnet",
	sm_local.getString(yblocalResource.APN_LIST_CTNET) 	+ " ctnet",
};

其中运行到第一个就不行了,调试的时候直接代码中断到这一行,继续运行,就抛出所谓的 java.lang.Error 异常了。我第一感觉就是,和新浪客户端的ID重复了,只是一种感觉,没有依据,就找到 localResource.java 这个文件:

public interface localResource {
    // Hash of: "local.local".
    long BUNDLE_ID = 0xxxxxxxxxxxxxxxxL;
    String BUNDLE_NAME = "local.local";
...

把这个值告诉了开发新浪微博黑莓客户端技术人员,因为我没有看到那个 // Hash of: “local.local”. 的提示,认为RIM会把把包的资源路径加入进来参与生成的,比如什么com.yuchting.yuchberry.client 等等字符串标示。

但是惊人的是,在新浪技术人员的查看下,发现咱两的ID是一致的,当时我就蒙了——怎么可能?后来想到的原因,很可能是他们新加入的模块的开发工程师和我看了同一套教程,都命名为 local.local 那么这个字符串的标示的hash不就一样了么?

于是吧local.local 换成了 local.yblocal 就OK了,大量的替换,svn的版本处理迎面扑来。

RIM 的RUNTIME 没有android context 的概念,完全都是JVM大环境下的操作,读取另一个已经注册的资源的不存在的符号,当然会over。不管怎么样,这个事情在我积极的更改、发布之后就告一段落了,虚惊一场,虽然最后在晚上10点发布完毕之后还出了点小插曲,总归于要结束了,可以好好睡一觉了……

第二天……

可是事情还没有完,早上起来,发现微博粉丝多了40个,下午到了60个,注册用户两天上升100多个,同步数稳步上升,好现象!很happy,准备把安卓版本的上传附件功能写完了。

随手打开GAE,靠!发送邮件的 quota 又到限制了,刚刚才把GAE的Billing关闭(不然每周$2.1,实在受不了),总不能让我又开开吧,昨天才研究了php怎么发送邮件,今天就要赶上自己写一个?为啥都在我刚刚研究的时候就出问题了呢?谁给我测试时间?

急急忙忙的吧php的发送邮件功能添加上,前两天才研究的BlueHost 邮件系统,开了一个邮件帐户 noreply@yuchs.com ,php发送邮件代码,立刻派上用场,直接上!

<?php
	if(!isset($_GET['to']) ){
		echo "<H1>403 FORBIDDEN</H1> ";
		exit;
	}
	
	$to		= $_GET['to'];
	
	if(!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $to)){
		echo '\'' . $_GET['to'] . '\' is not mail address form.';
		exit;
	}
	
	$from	= "noreply@yuchs.com";
	$reply	= "yuchberry@gmail.com";
	
	$messageID = '<' . rand() . '-' . date("Y_m_d_H_i_s") . '@yuchs.com>';
		
	$headers  = 'MIME-Version: 1.0' . "\r\n".
				'Content-type: text/plain; charset=utf-8' . "\r\n".
				'From: '. $from . "\r\n".
				'Reply-To: '. $reply . "\r\n".
				'Message-Id: '. $messageID . "\r\n";
				
	$subject = "=?UTF-8?B?".base64_encode("语盒官方服务提醒")."?=";
 
	$content = '你的语盒使用时间已经快到了,稍等一段时间后服务器会暂停服务。'."\r\n".
				'你可以登录官方网站 http://www.yuchs.com/ 进行时间的充值,继续使用,或者查看FAQ,进行自架服务器使用。' . "\r\n".
				'感谢你对语盒的关注和支持!' . "\r\n".
				"\r\n".
				'语盒开发者敬上!';

    $result = mail($to, $subject, $content, $headers);  
	
	if($result){
		echo 'OK';
	}else{
		echo 'Failed';
	}
	
?> 

这段代码是不是要求在自己的web主机上开启一个邮件帐户,我现在还是不知道,反正我是在web主机上加了一个邮件帐户 noreply@yuchs.com ,总之能解决问题就行。乒乓五四又一天过去了,终于,帐户邮件又能发送了。

哎,一天的劳命哪~

关于黑莓开发中的local i18n的冲突问题》上有4条评论

  1. 其实这完全是由于blackberry的开发者少,开发文档更少,要学的东西太多,要学的人太多造成的.
    大家都在边学边写.

  2. 我很喜欢这个软件,但有时候我忍不住要问,你这个软件要怎么装到手机上去????我搜索遍了整个网络,居然没有一遍是关于怎么装上手机的,真脑火,有时候忍不住想说TMD

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Time limit is exhausted. Please reload the CAPTCHA.