Ошибка: Model :: findById требуется идентификатор аргумента loopback android

Я новичок в использовании обратной связи, и у меня с ней проблема. Я создал базу данных Postgres и управлял ею, и, похоже, все работает нормально. База данных создается загрузочными файлами в формате json и содержит необходимые значения.

Но когда я хочу выполнить метод findById, у меня возникает следующая проблема:

Error for the request GET /api/members/1?id=1 : Error: Model::findById require the id argument

определение модели:

{
    "name": "Member",
    "strict": true,
    "idInjection": true,
    "base": "User",
    "options": {
       "validateUpsert": true
    },
    "properties": {
    "firstname": {
    "type": "string",
    "required": true
    },
    "lastname": {
    "type": "string",
    "required": true
    },
    "questiontype": {
    "type": "number",
    "required": true
    },
    "questionanswer": {
    "type": "string",
    "required": true
    }
    },
    "validations": [],
    "relations": {
    "issues": {
       "type": "hasMany",
       "model": "Issue",
       "foreignKey": "authorId"
    }

И я вызываю findById из моего LoginActivity:

 connect_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RestAdapter restAdapter = new RestAdapter(getApplicationContext(), "http://" + MY_IP + ":3000/api");
            MemberRepository memberRepo = restAdapter.createRepository(MemberRepository.class);
            memberRepo.findById(1, new ObjectCallback<Member>() {
                @Override
                public void onSuccess(Member member) {
                    System.out.println("Found !");
                }

                public void onError(Throwable t) {
                    System.out.println("Fail");
                }
            });
        }
    });

Дело в том, что когда я выполняю метод findById на localhost: 3000 / explorer из обратной петли, он возвращает правильный результат и вообще без ошибок.

Проблема появляется только на Android. Я использую библиотеку strongloop, предоставляемую loopback, в которой используется класс UserRepository, содержащий методы входа, выхода, поиска и т. д. Таким образом, они не должны быть ошибкой, исходящей от самого метода. Что привело меня к реальной проблеме, я действительно не могу понять, откуда она?

Пожалуйста, также переведите ошибку и включите ее как текст

Rob 08.05.2018 13:44

Хорошо, теперь готово

Laura Lopez 08.05.2018 20:24

Чтобы проверить, связана ли проблема с Android, попробуйте получить доступ к URL-адресу веб-службы (должен быть http://" + MY_IP + ":3000/api/members/1?id=1) прямо из браузера. Есть ли результат?

LS_ 09.05.2018 12:22

Привет, да, когда я делаю это прямо из браузера, он возвращает json члена с id = 1

Laura Lopez 09.05.2018 12:35

Я пытаюсь угадать, но если вы можете увидеть результаты, напрямую обращаясь к URL-адресу, возможно, в Android код генерирует запрос POST, в то время как только GET может быть включен. У вас есть доступ к методу, который предоставляет веб-сервис? Если да, можете ли вы добавить код к вопросу?

LS_ 09.05.2018 12:51

Да, используемый метод находится в этом файле: Strongloop github

Laura Lopez 09.05.2018 13:00

@LauraLopez Я посмотрел на класс, можете ли вы изменить строку: MemberRepository memberRepo = restAdapter.createRepository(MemberRepository.class); на MemberRepository memberRepo = restAdapter.createRepository(MemberRepository.class, "Member", Member); и проверить, получите ли вы такой же ответ?

LS_ 09.05.2018 16:04

Я только что попробовал и, к сожалению, все еще та же ошибка

Laura Lopez 09.05.2018 21:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
8
8
619
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я постараюсь дать несколько предложений, дайте мне знать, если что-то из этого сработает, чтобы я мог отредактировать ответ:

  • Из вашей ошибки: /api/members/1?id=1 это правильно, что он использует members вместо member в пути? members происходит из линии этоEnglish.plural(className);;
  • Если у вас есть доступ к библиотеке Strongloop, попробуйте добавить точку останова в операторе возврата getVerbForMethod в RestContractздесь и проверьте, возвращает ли ваш вызов GET;
  • Есть ответь здесь для вашей той же ошибки, но сгенерированный из вызова js, где они предлагают отредактировать remoteMethod вашего объекта;

ps: из Веб-сайт Strongloop говорится, что библиотека Android больше не поддерживается

Ответ принят как подходящий

Итак, после нескольких дней попыток я просто отказался от strongloop и попробовал использовать Retrofit2. Оказывается, теперь все работает отлично.

Еще раз спасибо @Signo за потраченное время! Довольно неприятный финал, но я думаю, что, как вы сказали, это, вероятно, не было правильным запросом, и я предполагаю, что тот факт, что он больше не поддерживался, просто прикончил меня.

Вероятно, лучший выбор, я думаю, что Retrofit и Gson - лучшие библиотеки для работы с веб-сервисами. (Этот полезный инструмент сэкономил мне много времени, когда мне приходилось создавать модели) Удачного кодирования :)

LS_ 13.05.2018 21:17

Другие вопросы по теме