我在云上保存了一个持久的锚(365天)。现在,我想找回它。我可以很好地使用谷歌在其示例项目之一中提供的代码。然而,我想使用场景形式,因为我想在之后做一些操作(绘制3D形状),这在场景形式中更容易做到。然而,我似乎无法解决持续的云锚。我在网上找到的所有例子,都不处理持久的云锚,它们只处理正常的24小时云锚。
@RequiresApi(api = VERSION_CODES.N)
protected void onUpdateFrame(FrameTime frameTime) {
Frame frame = arFragment.getArSceneView().getArFrame();
// If there is no frame, just return.
if (frame == null) {
return;
}
if (session == null) {
Log.d(TAG, "setup a session once");
session = arFragment.getArSceneView().getSession();
cloudAnchorManager = new CloudAnchorManager(session);
}
if (resolveListener == null && session != null) {
Log.d(TAG, "setup a resolveListener once");
resolveListener = new MemexViewingActivity.ResolveListener();
// Encourage the user to look at a previously mapped area.
if (cloudAnchorId != null && !gotGoodAnchor && cloudAnchorManager != null) {
Log.d(TAG, "put resolveListener on cloud manager once");
userMessageText.setText(R.string.resolving_processing);
cloudAnchorManager.resolveCloudAnchor(cloudAnchorId, resolveListener);
}
}
if (cloudAnchorManager != null && session != null) {
try {
Frame dummy = session.update();
cloudAnchorManager.onUpdate();
} catch (CameraNotAvailableException e) {
e.printStackTrace();
}
}
}
我写的上面的更新函数有什么错误吗?CloudAnchorManager类与Google在其持久化云锚示例中使用的类相同。在这里,我将把它的代码也放在这里:
package com.memex.eu.helpers;
import android.util.Log;
import com.google.ar.core.Anchor;
import com.google.ar.core.Anchor.CloudAnchorState;
import com.google.ar.core.Session;
import com.google.common.base.Preconditions;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* A helper class to handle all the Cloud Anchors logic, and add a callback-like mechanism on top of
* the existing ARCore API.
*/
public class CloudAnchorManager {
/** Listener for the results of a host operation. */
public interface CloudAnchorListener {
/** This method is invoked when the results of a Cloud Anchor operation are available. */
void onComplete(Anchor anchor);
}
private final Session session;
private final Map<Anchor, CloudAnchorListener> pendingAnchors = new HashMap<>();
public CloudAnchorManager(Session session) {
this.session = Preconditions.checkNotNull(session);
}
/** Hosts an anchor. The {@code listener} will be invoked when the results are available. */
public synchronized void hostCloudAnchor(Anchor anchor, CloudAnchorListener listener) {
Preconditions.checkNotNull(listener, "The listener cannot be null.");
// This is configurable up to 365 days.
Anchor newAnchor = session.hostCloudAnchorWithTtl(anchor, /* ttlDays= */ 365);
pendingAnchors.put(newAnchor, listener);
}
/** Resolves an anchor. The {@code listener} will be invoked when the results are available. */
public synchronized void resolveCloudAnchor(String anchorId, CloudAnchorListener listener) {
Preconditions.checkNotNull(listener, "The listener cannot be null.");
Anchor newAnchor = session.resolveCloudAnchor(anchorId);
pendingAnchors.put(newAnchor, listener);
}
/** Should be called after a {@link Session#update()} call. */
public synchronized void onUpdate() {
Preconditions.checkNotNull(session, "The session cannot be null.");
for (Iterator<Map.Entry<Anchor, CloudAnchorListener>> it = pendingAnchors.entrySet().iterator();
it.hasNext(); ) {
Map.Entry<Anchor, CloudAnchorListener> entry = it.next();
Anchor anchor = entry.getKey();
if (isReturnableState(anchor.getCloudAnchorState())) {
CloudAnchorListener listener = entry.getValue();
listener.onComplete(anchor);
it.remove();
}
}
}
/** Clears any currently registered listeners, so they won't be called again. */
synchronized void clearListeners() {
pendingAnchors.clear();
}
private static boolean isReturnableState(CloudAnchorState cloudState) {
switch (cloudState) {
case NONE:
case TASK_IN_PROGRESS:
return false;
default:
return true;
}
}
}
另外,这里是我正在使用的另一个类(这也是来自Google示例项目):
/* Listens for a resolved anchor. */
private final class ResolveListener implements CloudAnchorManager.CloudAnchorListener {
@Override
public void onComplete(Anchor resolvedAnchor) {
runOnUiThread(
() -> {
Anchor.CloudAnchorState state = resolvedAnchor.getCloudAnchorState();
if (state.isError()) {
Log.e(TAG, "Error resolving a cloud anchor, state " + state);
userMessageText.setText(getString(R.string.resolving_error, state));
return;
}
Log.e(TAG, "cloud anchor successfully resolved, state " + state);
anchor = resolvedAnchor;
userMessageText.setText(getString(R.string.resolving_success));
gotGoodAnchor = true;
});
}
}
当我运行我的应用程序时,我将手机的摄像头指向我之前放置对象的物理空间,但锚从未解析。我想问题可能出在更新功能上,但我似乎不知道是什么。
我想我没有正确地看着这个物体。现在,它起作用了。此代码是正确的。
问题内容: 您好,我对hibernate世界非常陌生,似乎遇到了障碍。我需要存储的对象中有一个哈希映射。 事情是,我永远不需要使用此映射进行搜索,排序或做任何事情,我只需要将其与对象一起保存并在加载对象时加载它,因此我希望hibernate可以通过某种方式对其进行序列化然后将其存储在CLOB或BLOB字段中,但是我似乎找不到任何方法。 所以我接下来试图让hibernate保存这样 但这在运行时给了
问题内容: 我想知道如何禁用Redis的持久性。这里提到了这样做的可能性:http : //redis.io/topics/persistence。我的意思是和那里描述的完全一样。任何帮助将不胜感激! 问题答案: 要禁用Redis中的 所有 数据持久性,请执行以下操作: 通过将配置指令设置为(默认值)来禁用AOF 通过禁用(注释掉)所有配置指令来禁用RDB快照(默认情况下定义了3个) 这些配置指令
我在想如何禁用Redis的耐药性。这里提到了这样做的可能性:http://redis.io/topics/persistence。我的意思和那里描述的完全一样。任何帮助都将非常感谢!
在我的测试应用程序中,我使用Apache HttpClient向同一主机执行连续的HttpGet请求,但在每个下一个请求时,都会发现之前的HttpConnection被关闭并创建新的HttpConnection。 我使用同一个HttpClient实例,不关闭响应。我从每个实体获取InputStream,用扫描仪读取,然后关闭扫描仪。我测试了KeepAlivestStrategy,结果是真的。请求之
我已经开始使用推荐的,并不再使用。其中一件我无法粘合的事情是使用持久的cookie存储。我只想在我的连接上附加一个定制的cookie处理程序/管理器来存储cookie。Android文档并没有太大帮助,因为它将有关cookie的主题概括为两行。 我之前一直在使用LoopJ的PersistentCookieStore,效果很好。 关于如何在Android中设置一个持久的cookie存储,我可以附加到
问题内容: 到目前为止,我的偏好是始终使用EntityManager 来处理插入和更新。但是我还注意到,合并会在更新/插入之前执行其他选择查询,以确保数据库中不存在记录。 现在,我正在一个需要对数据库进行大量(批量)插入的项目。从性能的角度来看,在我绝对知道我一直在创建要持久化的对象的新实例的情况下,使用持久化而不是合并有意义吗? 问题答案: 它不是用一个好主意时,就足够了- 做了很多更多的工作。