Я новичок в использовании обратной связи, и у меня с ней проблема. Я создал базу данных 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, содержащий методы входа, выхода, поиска и т. д. Таким образом, они не должны быть ошибкой, исходящей от самого метода. Что привело меня к реальной проблеме, я действительно не могу понять, откуда она?
Хорошо, теперь готово
Чтобы проверить, связана ли проблема с Android, попробуйте получить доступ к URL-адресу веб-службы (должен быть http://" + MY_IP + ":3000/api/members/1?id=1) прямо из браузера. Есть ли результат?
Привет, да, когда я делаю это прямо из браузера, он возвращает json члена с id = 1
Я пытаюсь угадать, но если вы можете увидеть результаты, напрямую обращаясь к URL-адресу, возможно, в Android код генерирует запрос POST, в то время как только GET может быть включен. У вас есть доступ к методу, который предоставляет веб-сервис? Если да, можете ли вы добавить код к вопросу?
Да, используемый метод находится в этом файле: Strongloop github
@LauraLopez Я посмотрел на класс, можете ли вы изменить строку: MemberRepository memberRepo = restAdapter.createRepository(MemberRepository.class); на MemberRepository memberRepo = restAdapter.createRepository(MemberRepository.class, "Member", Member); и проверить, получите ли вы такой же ответ?
Я только что попробовал и, к сожалению, все еще та же ошибка




Я постараюсь дать несколько предложений, дайте мне знать, если что-то из этого сработает, чтобы я мог отредактировать ответ:
/api/members/1?id=1 это правильно, что он использует members вместо member в пути? members происходит из линии этоEnglish.plural(className);;Strongloop, попробуйте добавить точку останова в операторе возврата getVerbForMethod в RestContractздесь и проверьте, возвращает ли ваш вызов GET;remoteMethod вашего объекта;ps: из Веб-сайт Strongloop говорится, что библиотека Android больше не поддерживается
Итак, после нескольких дней попыток я просто отказался от strongloop и попробовал использовать Retrofit2. Оказывается, теперь все работает отлично.
Еще раз спасибо @Signo за потраченное время! Довольно неприятный финал, но я думаю, что, как вы сказали, это, вероятно, не было правильным запросом, и я предполагаю, что тот факт, что он больше не поддерживался, просто прикончил меня.
Вероятно, лучший выбор, я думаю, что Retrofit и Gson - лучшие библиотеки для работы с веб-сервисами. (Этот полезный инструмент сэкономил мне много времени, когда мне приходилось создавать модели) Удачного кодирования :)
Пожалуйста, также переведите ошибку и включите ее как текст