Error: Model::findById require argument id loopback android
Error: Model::findById require argument id 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"
}
然后我从我的 LoginActivity 调用 findById :
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");
}
});
}
});
问题是,当我从环回执行 localhost:3000/explorer 上的 findById 方法时,它 returns 得到了正确的结果,并且完全没有错误。
该问题仅在 Android 上出现。我使用 loopback 提供的 strongloop 库,它使用包含登录、注销、查找等方法的 UserRepository class。所以它们不应该是来自方法本身的任何错误。这导致我遇到实际问题,我真的无法弄清楚它来自哪里?
我会尝试提供一些建议,让我知道这是否可行,以便我编辑答案:
- 根据您的错误:
/api/members/1?id=1
在路径中使用 members
而不是 member
是否正确? members
来自 this 行 English.plural(className);
;
- 如果您有权访问
Strongloop
库,请尝试在 RestContract
here 中 getVerbForMethod
的 return 语句中添加断点并检查是否你的来电 returns GET
;
- 同样的错误有一个 answer here,但它是从 js 调用中生成的,他们建议编辑对象的
remoteMethod
;
ps:来自 Strongloop website 它指出 Android 库不再被积极维护
所以在尝试了几天之后,我放弃了 strongloop 并尝试使用 Retrofit2。结果现在一切正常。
再次感谢@Signo 抽出宝贵时间!相当令人沮丧的结局,但我认为正如你所说,它可能没有提供正确的请求,我想它不再被维护的事实让我失望了。
我是环回的新手,我遇到了问题。 我已经创建并管理了一个 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"
}
然后我从我的 LoginActivity 调用 findById :
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");
}
});
}
});
问题是,当我从环回执行 localhost:3000/explorer 上的 findById 方法时,它 returns 得到了正确的结果,并且完全没有错误。
该问题仅在 Android 上出现。我使用 loopback 提供的 strongloop 库,它使用包含登录、注销、查找等方法的 UserRepository class。所以它们不应该是来自方法本身的任何错误。这导致我遇到实际问题,我真的无法弄清楚它来自哪里?
我会尝试提供一些建议,让我知道这是否可行,以便我编辑答案:
- 根据您的错误:
/api/members/1?id=1
在路径中使用members
而不是member
是否正确?members
来自 this 行English.plural(className);
; - 如果您有权访问
Strongloop
库,请尝试在RestContract
here 中getVerbForMethod
的 return 语句中添加断点并检查是否你的来电 returnsGET
; - 同样的错误有一个 answer here,但它是从 js 调用中生成的,他们建议编辑对象的
remoteMethod
;
ps:来自 Strongloop website 它指出 Android 库不再被积极维护
所以在尝试了几天之后,我放弃了 strongloop 并尝试使用 Retrofit2。结果现在一切正常。
再次感谢@Signo 抽出宝贵时间!相当令人沮丧的结局,但我认为正如你所说,它可能没有提供正确的请求,我想它不再被维护的事实让我失望了。