Товарищи-разработчики,
Я создаю приложение, и Android Vitals показывает странную ошибку:
Проблема: в (динамический метод-обертка) System.Object.3(intptr, intptr, intptr)
android.runtime.JavaProxyThrowable: System.ArgumentOutOfRangeException: недопустимый календарь для данной культуры.
Эта проблема возникает только в следующей конфигурации ar_IL , я могу ошибаться, но, думаю, это означает Арабский из Израиля .Я не знаю, как проверить это или даже как выбрать его в эмуляторе, так как я не говорю на близком к нему языке.Это предварительный просмотр ошибки:
Кроме того, я загрузил видео об ошибке (фактически приложение заморожено и никогда не открывается):
https://youtu.be/aLXwEBHZnwA
Это довольно странно, так как мое приложение было загружено в разных странах, включая некоторые говорящие на арабском языке как Саудовская Аравия и у меня естьникогда не было жалоб или уведомлений о том, что мое приложение не работает или никогда не открывалось по причинам X или Y.
Я собираюсь добавить некоторые части своего кода, которые, как я считаю, связаны с WebView, и он открывается иможет быть полезно:
OnCreate
функция в C #:
public static bool RUN_ONCE { get; set; } = true;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Rating();
RequestWindowFeature(WindowFeatures.NoTitle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
WebView = FindViewById<WebView>(Resource.Id.webView);
WebView.Settings.DomStorageEnabled = true;
WebView.Settings.JavaScriptEnabled = true;
WebView.Settings.AllowFileAccessFromFileURLs = true;
WebView.AddJavascriptInterface(new CallJSInterface(this), "CSharp");
WebView.SetWebViewClient(new JavaScriptWebViewClient($"javascript:firstExecTime({RUN_ONCE.ToString().ToLowerInvariant()});"));
WebView.LoadUrl("file:///android_asset/index.html");
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
StrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder()
.PenaltyDeathOnFileUriExposure()
.Build();
StrictMode.SetVmPolicy(policy);
}
RunOnce();
}
private void RunOnce()
{
if (RUN_ONCE)
{
RUN_ONCE = false;
}
}
firstExecTime
функция в JS:
function firstExecTime(firstTime) {
isFirstTime = firstTime;
if (firstTime)
setFirstTimeValues();
}
И у меня есть этот процесс для установки различныхязыки в JS (на данный момент поддерживаются только английский и испанский языки):
const androidLngLocation = "file:///android_asset/js/lang/";
var langs = ["en", "es"];
var langCode = "";
var currentTranslation;
var errorLng = false;
var translate = function (jsdata) {
currentTranslation = jsdata;
$("[tkey]").each(function () {
$(this).html(jsdata[$(this).attr("tkey")]);
});
$("[tkey-title]").each(function () {
$(this).prop("title", jsdata[$(this).attr("tkey-title")]);
});
$("[tkey-placeholder]").each(function () {
$(this).prop("placeholder", jsdata[$(this).attr("tkey-placeholder")]);
});
$("[tkey-btn-ok]").each(function () {
$(this).data("btn-ok-label", jsdata[$(this).attr("tkey-btn-ok")]);
});
$("[tkey-btn-cancel]").each(function () {
$(this).data("btn-cancel-label", jsdata[$(this).attr("tkey-btn-cancel")]);
});
$("[tkey-data-title]").each(function () {
$(this).data("title", jsdata[$(this).attr("tkey-data-title")]);
});
};
langCode = navigator.language.substr(0, 2);
try {
if (!langs.includes(langCode))
langCode = "en";
$.getJSON(`${androidLngLocation}${langCode}.json`, translate);
}
catch (e) {
errorLng = true;
setTimeout(function () {
if (!isValueInArray(langs, langCode))
langCode = "en";
$.getJSON(`${androidLngLocation}${langCode}.json`, translate);
}, 125);
}
function isValueInArray(arr, val) {
inArray = false;
for (i = 0; i < arr.length; i++)
if (val === arr[i])
inArray = true;
return inArray;
}
Кроме того, вот ссылка на logcat:
https://1drv.ms/t/s!AhpAtowYvNcyj-Fo1sIQUhu12Ce3Jw
У меня естьнекоторые переводы на английский и испанский с ресурсов Android для некоторых небольших разделов приложения like NavigationDrawer, но у меня нет другого перевода, и по умолчанию язык английский в любом другом случае.
Кто-нибудь когда-нибудь испытывал нечто подобное?Вы знаете, как это исправить?Или вы знаете, как выглядит язык в эмуляторе, и я мог бы протестировать сам?Спасибо за вашу поддержку.