Язык Android String.format явно установлен в США, но для целых чисел используются персидские числа
Название объясняет все это.
String method = String.format(
"SELECT studymap.id,studymap.title,studymap.zorder,studymap.hierarchy_id,studymap.book_id," +
"studymap.abstract,studymap.type,studymap.free_view,studymap.localpath,studymap.flags," +
"studymap.visit_status,downloads.status as download_status,downloads.studymap_id,studymap.publish_status "+
"FROM studymap LEFT JOIN downloads ON studymap.id = downloads.studymap_id" +
" WHERE studymap.book_id = %d ORDER BY studymap.zorder", book.ID);
book.ID - целые числа, но я все еще получаю эту ошибку на некоторых устройствах:
android.database.sqlite.SQLiteException: no such column: ۵۴۵ (code 1): , while compiling: SELECT studymap.id,studymap.title,studymap.zorder,studymap.hierarchy_id,studymap.book_id,studymap.abstract,studymap.type,studymap.free_view,studymap.localpath,studymap.flags,studymap.visit_status,downloads.status as download_status,downloads.studymap_id,studymap.publish_status,hierarchy.is_owned FROM studymap LEFT JOIN downloads ON studymap.id = downloads.studymap_id LEFT JOIN hierarchy ON hierarchy.id = studymap.hierarchy_id WHERE studymap.hierarchy_id = ۵۴۵ ORDER BY studymap.zorder at com.nemo.kaman_android.core.ag.run(SqliteKit.java:303)
SqliteKit.java (303):
Cursor cursor = KamanDatabase.rawQuery(query, null);
Я даже установил язык приложения по умолчанию в MyApplication.java
Locale locale = new Locale(Locale.ENGLISH.getLanguage());
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
но этого явно недостаточно
Я строил такие запросы некоторое время назад:
"SELECT sum(badge) ... " + year_filter + ...
и он вылетал с такими же ошибками на некоторых устройствах. но после использования формата некоторые вызовы исправляются, а некоторые нет. Я не знаю, о чем я думаю.
Редактировать 2: Я подумал, что, возможно, я поместил персидский символ utf8 в середине запроса где-нибудь, что делает целые числа персидскими, но, как теперь я вижу в моих журналах сбоев, такие же исключения происходят на разных запросах на разных устройствах, я просто не может собрать все воедино, одно из устройств имеет стандартную локализацию "фарси", а другое "en", по крайней мере, так считает Acralyzer.