Автоматическое связывание с jar не создает дженерики
Мы создаем навигационное приложение, используя Indoor Atlas SDK, у которого есть карта в верхних 30% экрана и 2 списка в нижних 70% экрана, и чтобы сохранить кросс-платформенный код, я создал его с помощью Xamarin Forms Portable Class Библиотека и использование Dependency Injection для кода, специфичного для платформы.
Я создал библиотеку привязок, как описано в этом учебном пособии, и хотя это было сложно в начале, потому что, как только я загружал приложение в эмулятор, оно вылетало из-за ошибки Unspecified Link Error, которая оказалась из-за того факта, что мой эмулятор по умолчанию был на архитектуре x86, тогда как собственные библиотеки IndoorAtlas присутствуют только для armabi-v7a и arm64-v8a, и запуск приложения на таком устройстве не выдал ошибку, но я не могу заставить его работать, как при обнаружении текущего местоположения и получении текущего плана этажа хотя я могу заставить его работать совсем наоборот.
Чтобы показать точный код - это не работает, когда BackgroundListener.Currentlocation имеет тип Android.Locations.Location
mIALocationManager = IALocationManager.Create(this);
IALocation currentLocation = IALocation.From(BackgroundListener.Currentlocation);
mIALocationManager.SetLocation(currentLocation);
но это делает
string floorPlanID = "b11a5c2b-6f9b-4865-b52e-lastidpart";
IALocation FLOOR_PLAN_ID = IALocation.From(IARegion.FloorPlan(floorPlanID));
mIALocationManager.SetLocation(FLOOR_PLAN_ID);
Под "не работает" я подразумеваю, что он не способен обнаружить регион, который в значительной степени интуитивно понятен. Я проверил документы и нашел этот код для получения FloorPlan
private void fetchFloorPlan(String id) {
// Cancel pending operation, if any
if (mPendingAsyncResult != null && !mPendingAsyncResult.isCancelled()) {
mPendingAsyncResult.cancel();
}
mPendingAsyncResult = mResourceManager.fetchFloorPlanWithId(id);
if (mPendingAsyncResult != null) {
mPendingAsyncResult.setCallback(new IAResultCallback<IAFloorPlan>() {
@Override
public void onResult(IAResult<IAFloorPlan> result) {
Logger.d(TAG, "onResult: %s", result);
if (result.isSuccess()) {
handleFloorPlanChange(result.getResult());
} else {
// do something with error
Toast.makeText(FloorPlanManagerActivity.this,
"loading floor plan failed: " + result.getError(), Toast.LENGTH_LONG)
.show();
}
}
}, Looper.getMainLooper()); // deliver callbacks in main thread
}
}
Сейчас я потратил 3 дня на поиски решения, но на момент написания документации IndoorAtlas не очень подробный (или, возможно, я просто привык к подробным видам MSDN). У меня есть кое-какие знания Java (так как я изучал их в колледже, но не был знанием), и это было основной причиной, по которой я перешел на Xamarin. Поскольку C# является моим основным языком знаний, я могу завершить большую часть приложения с помощью Xamarin всего за 3 недели, тогда как я не смог закончить даже половину с Java за последние 6 месяцев (что исключает любые предложения по работе приложения в Native Android).).
Теперь запросы
- fetchFloorPlan требует floorPlanID в качестве параметра, как я могу получить это автоматически.
- В Java мы можем создать интерфейс, чего нет в C#, так как мне получить план этажа?
- Автоматические привязки JAR в Xamarin создают IATask и другие интерфейсы (неуниверсальные), в то время как функция ожидает обобщенных элементов, я могу создавать свои собственные задачи, но другие функции ожидают этих входных данных, поэтому никакой выгоды.
- Я подозреваю, что мы можем воссоздать все шаги в C#, но у меня нет такого большого опыта в Java
- Я также подозреваю, что анонимные методы могли бы решить такое решение, если бы код был полностью на C#, но я не мог понять путь здесь.
Поэтому мне нужна помощь и руководство в поиске пути к решению.
Другие моменты, которые, хотя и дают причины, по которым возникает проблема непатентованных средств, я ищу решение этой проблемы.
- Обобщения Java - стирание типов - когда и что происходит
- 19740 - Добавить поддержку для привязки универсальных интерфейсов Java к универсальным интерфейсам C#?
Примечание. Если вы считаете, что я являюсь вампиром-помощником для получения бесплатной помощи, мы можем подключиться и передать на внешний ресурс какой-то раздел приложения, поскольку я уже разместил запрос на Upwork, и в любом случае я опубликую решение для сообщества для будущих читателей.