此方法属于我在Android Studio中使用Google App Engine后端的Android项目中的端点:
@ApiMethod(name = "getAllUnclaimedLeftovers")
public Collection<Leftover> getAllUnclaimedLeftovers() {
Collection<Leftover> unclaimedLeftoverOffers = new ArrayList<Leftover>();
for(Leftover leftover : ofy().load().type(Leftover.class)) {
if (!leftover.isClaimed() && leftover.isValid()) {
unclaimedLeftoverOffers.add(leftover);
}
}
return unclaimedLeftoverOffers;
}
如您所见,永远不会返回null
。
在这里,您可以通过相应gradle命令生成的客户端库,使用前一个后端方法在项目的应用程序端查看方法。
public static Collection<Leftover> getAllUnclaimedLeftovers() throws IOException {
try {
return Proxy.getEndpoint().getAllUnclaimedLeftovers().execute().getItems();
} catch (IOException e) {
Log.d("DataStore_UnclaimedLeftovers_Error", e.getMessage());
throw e;
}
}
我的问题是:最后一个方法如何返回null
对象?
现在我正在检查null
个对象,一切正常,应用程序和后端已部署并正常运行。
方法getAllUnclaimedLeftovers()
用于:
private class UnclaimedLeftoversTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
setUnclaimedLeftovers(LeftoverProxy.getAllUnclaimedLeftovers());
setIsUnclaimedLeftoversSucceeded(true);
return null;
} catch (IOException e) {
setIsUnclaimedLeftoversSucceeded(false);
return null;
} catch (NullPointerException e) {
setIsUnclaimedLeftoversSucceeded(false);
return null;
}
}
}
LeftoverProxy.getAllUnclaimedLeftovers()引用null
对象。
查看自动生成的端点lib:
public GetAllUnclaimedLeftovers getAllUnclaimedLeftovers() throws java.io.IOException {
GetAllUnclaimedLeftovers result = new GetAllUnclaimedLeftovers();
initialize(result);
return result;
}
public class GetAllUnclaimedLeftovers extends EndpointRequest<com.frigoshare.endpoint.model.LeftoverCollection> {
private static final String REST_PATH = "leftovercollection";
protected GetAllUnclaimedLeftovers() {
super(Endpoint.this, "GET", REST_PATH, null, com.frigoshare.endpoint.model.LeftoverCollection.class);
}
...
}
超类的构造函数:
public EndpointRequest(
Endpoint client, String method, String uriTemplate, Object content, Class<T> responseClass) {
super(
client,
method,
uriTemplate,
content,
responseClass);
}
在AbstractGoogleClientRequest中搜索时,我找到了execute()
:
/**
* Sends the metadata request to the server and returns the parsed metadata response.
*
* <p>
* Subclasses may override by calling the super implementation.
* </p>
*
* @return parsed HTTP response
*/
public T execute() throws IOException {
HttpResponse response = executeUnparsed();
if (Void.class.equals(responseClass)) {
response.ignore();
return null;
}
return response.parseAs(responseClass);
}
但是,在Google的代码中挖掘没有意义,libs必须实现正确的行为。我的意思是,或者你得到了一个反应,或者你得到了一个失败并抛出IOException,但不是介于两者之间的东西?
答案 0 :(得分:0)
从我的Null
后端获取空集合时,我收到GAE
。
我尝试将空集合推送到jsonMappingException
后端时收到GAE
。
所以我想JSON
(或Gradle
的{{1}}插件)无法在两个方向上处理空集合。
由于这个项目适用于我的课程,我也看到了其他学生的项目有这种奇怪的行为。