我创建了一个应用程序,其中一个地点列表保存在数据库中。我只根据Google留档保存了保存地点的地点ID。
然后我创建了一个界面,让用户输入他们的当前位置(mCurrentLocation)。
然后,我创建了一个异步任务,检查数据库中保存的每个地点ID,并检查哪些地点距离用户位置500米以内。这是在doInBackground中完成的。根据Google文档,我使用了getPlaceById和setResultCallback
在帖子执行回收器视图更新。
问题:PendingResult setResultCallback似乎有延迟。根据我的日志,当setResultCallback尚未完成时,PostExecute已经被调用了!因此,我的“回收站”视图没有看到所有结果
日志:
内部for循环
内部for循环
内部for循环
for 循环已退出
输入后执行
内部for循环
内部for循环
@覆盖受保护的列表doInBackground(列表…列表){
ArrayList<Places> selectedPlaces = new ArrayList<>();
for ( int i = 0; i < lists[0].size(); i++) {
// Get the place from the placeID
PendingResult<PlaceBuffer> placeResult = Places.GeoDataApi.
getPlaceById(mGoogleApiClient, lists[0].get(i).getAddress());
placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(@NonNull PlaceBuffer places) {
Log.v(LOG_TAG, "Inside for loop");
// Get the latitude and longitude for the specific place
LatLng latLng = places.get(0).getLatLng();
// Set the location object for the specific place
Location A = new Location("Place");
A.setLatitude(latLng.latitude);
A.setLongitude(latLng.longitude);
// get the distance of the place from the selected location
float distance = A.distanceTo(mUserLocation);
// if the distance is less than 500m
if (distance < 500) {
selectedPlaces.add(lists[0].get(position));
}
}
});
}
Log.v(LOG_TAG, "for loop exited");
return selectedPlaces;
}
@Override
protected void onPostExecute(List<Places> places) {
Log.v(LOG_TAG, "onPostExecute entered");
//update Recycler view
}
我修改了代码。我应该使用await()代替setResultCallback。
所以新代码应该是这样的:
PlaceBuffer places = placeResult.await();
然后删除
placeResult.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(@NonNull PlaceBuffer places) {
问题内容: 我正在尝试创建一种方法,从中可以查询数据库并检索整个表。 目前,如果我使用这些数据只是正常工作 中 的方法。但是,我希望该方法返回结果。 我正在了解当前代码。 我该如何实现? 问题答案: 您永远不要通过公共方法来回避。这很容易导致资源泄漏,因为您不得不保持语句和连接打开。关闭它们将隐式关闭结果集。但是,将它们保持打开状态将导致它们悬而未决,并且当它们打开过多时,将导致数据库用尽资源。
问题内容: 我一直在尝试使用Java的ProcessBuilder在Linux中启动应“长期”运行的应用程序。该程序的运行方式是启动命令(在本例中,我正在启动媒体播放应用程序),允许其运行并检查以确保它没有崩溃。例如,检查PID是否仍处于活动状态,然后重新启动该进程(如果已终止)。 我现在遇到的问题是PID在系统中仍然有效,但是应用程序的GUI挂起了。我尝试将ProcessBuilder(cmd)
在我的控制器中,我返回由另一个线程填充的延迟结果: FooController.java 页面准备者.java 显然,再次调用所有筛选器以“完成”请求。我的一个过滤器,需要访问 豆,这是请求范围的。该调用引发异常 查看我配置的异常: 但是没有区别。我该怎么解决这个问题?
问题内容: 我正在使用JDBC来实现非常简单的数据库连接。 我已经创建了连接/语句并执行了查询。我在调试器中检查语句的查询对象,以确认它正在发送正确的查询。然后,我再次检查了数据库中的查询(直接从调试器复制),以确保其返回数据。但是,返回的结果集在.next()上给出false 这里有我遗漏的常见陷阱吗? 还有myDB类(一个简单的包装程序,使我可以将连接/语句代码放入任何项目中) 编辑:根据建议
主要内容:ResultSet类型,ResultSet的并发性,浏览结果集,查看结果集,更新结果集SQL语句执行后从数据库查询读取数据,返回的数据放在结果集中。 语句用于从数据库中选择行并在结果集中查看它们的标准方法。 接口表示数据库查询的结果集。 对象维护指向结果集中当前行的游标。 术语“结果集”是指包含在对象中的行和列数据。 接口的方法可以分为三类: 浏览方法:用于移动光标。 获取方法:用于查看光标指向的当前行的列中的数据。 更新方法:用于更新当前行的列中的数据。 然后在基础数据库中更新数
我有以下四个测试,最后一个测试在运行时挂起。为什么会发生这种情况: 我使用这个扩展方法的restSharp RestClient: 为什么最后一个测试挂起?