我有一个小的Android应用程序,我用它来根据语言环境以不同的格式打印特定的日期.
这是我的代码(使用java.text.DateFormat):
Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")};
for(int i = 0; i < locales.length; ++i) {
Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime()));
}
Run Code Online (Sandbox Code Playgroud)
因此,LogCat中的输出是:
D/FormatPoC( 390): en_US - 4/27/12
D/FormatPoC( 390): en_GB - 4/27/12
D/FormatPoC( 390): en_AU - 4/27/12
D/FormatPoC( 390): en_NZ - 4/27/12
D/FormatPoC( 390): en_ZA - 4/27/12
Run Code Online (Sandbox Code Playgroud)
所以我的问题是 - 为什么所有这些都一样?在Java SE中,我得到:
en_US - 4/27/12
en_GB - 27/04/12
en_AU - 27/04/12 …Run Code Online (Sandbox Code Playgroud) 我正在使用SQLCipher for Android,我正在尝试确定测试用户提供的密码是否有效的正确方法.
我的第一个倾向是尝试使用给定的密码打开数据库,使用SQLCipher实现SQLiteOpenHelper.getReadableDatabase(password),然后捕获SQLiteException弹出的数据库.
这确实有效,但问题是因为Android API实际上包含了底层的C调用,它为你做了很多工作 - 特别是当你使用Android API打开数据库时,它会打开数据库,运行本机C级sqlite3_key方法(使用提供的密码),然后尝试在数据库上设置区域设置,无论提供的密码是否正确.
此时,Android库尝试设置区域设置,底层数据库抛出"加密或不是数据库" SQLiteException,它被捕获并重新抛出; 但在此之前,会将无关的错误写入日志,实质上是说无法设置区域设置并且数据库正在关闭(包含堆栈跟踪).因为这是由Android库专门编写的,所以我无法抑制它,在日志中留下一个实际上与我原来的问题无关的丑陋错误,这只是我传入了错误的密码.
因为Android库不公开C级调用,所以我不能只使用SQLCipher API文档中描述的关于测试密钥的方法,因为我没有权限直接打开数据库.
我倾向于使用SQLiteDatabaseHook,但最好的我能说,这排除了我的使用SQLiteOpenHelper,这似乎没有提供设置钩子的方法.
有没有其他人知道更好的方法来测试输入密码是否通过SQLCipher Android API正确解密SQLCipher数据库?我完全希望调用一个方法并检查抛出的异常 - 我不想要的是操作尝试在数据库上执行无关的处理(如set locale)并在我的日志中写入一个完全不可抑制的错误.
我有一个非常简单的启用CORS的Node.js Web服务器在我办公室的另一台机器上运行.我设置它在端口8080上运行.
如果我发送它作为初始请求,触发预检(例如具有内容类型的请求application/json),它将失败,但仅在非常特定的条件下:
这是我用来发送请求的代码:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://myserver.domain.com'); // NOT the real URL of course...
xhr.setRequestHeader('Content-Type', 'application/json'); // Triggers the preflight OPTIONS request.
xhr.send();
Run Code Online (Sandbox Code Playgroud)
非常简单.没有花里胡哨,但出于某种原因,如果我在Mac上运行该请求,浏览器似乎会在发送之前吞下OPTIONS请求.我没有收到服务器收到的任何迹象,浏览器控制台显示(相对无用)错误.所有三种主要浏览器(Chrome,Safari和Firefox)都显示相同的行为.
其他拥有类似Mac的同事也尝试了相同的结果,因此它似乎并不特定于我的机器.
我认为这可能是我的服务器的一个问题,因为我对一个着名的CORS启用的API服务器(即api.github.com)尝试了同样的方法,并且工作得很好.但是,我在本地针对2个完全不同的服务器应用程序运行它,结果相同.
CORS响应头看起来很好 - 正如我所说,如果我从Windows浏览器发送请求,它的工作正常.此外,如果我最初发送非预先请求的请求,后续的预检请求也可以正常工作.
我认为在"localhost"或"127.0.0.1"上运行服务器或客户端可能是一个问题,但我也使用它们的主机名运行两个结果相同.
没有涉及SSL,一切都是通过HTTP明文.
有没有人见过这种行为,特定于Mac浏览器?
我有一个非常简单的Android应用程序,包含一个Activity,带有一些文本框和一些处理代码.
当我在2.3设备上安装并首次打开它时,它会分配~2.7MB的内存(根据Eclipse DDMS中的Heap update选项卡).
在3.1设备上,它分配~6.1MB.
在4.0设备上,它分配~13.8MB.
我在3之间没有进行任何代码更改,这些措施是在初始安装/打开应用程序时采取的(因此它没有时间进行任何泄漏).它不使用任何图像,也没有专门启用硬件加速.
有谁知道为什么脚印可能会有这么大差异?我认为它与操作系统版本的差异有关,但我想知道是否有人知道这些差异可能是什么.
我已经读过有关从3.0开始的位图分配的变化导致分配的内存明显增加,但我的应用程序不使用任何图像.它只包含一些EditText字段和TextViews.