如何使用 Android DDP 从 Meteor 服务器获取集合?

How to get collection from Meteor server with Android DDP?

让我开始解释我的问题。有 repository with some explanations,但没有方法如何从 Meteor 服务器(仅插入)获取集合或 json 文件。另外作者没有正确解释 onDataChanged、onDataAdded 等方法

public class Login extends Activity implements MeteorCallback{

public static Meteor mMeteor;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    mMeteor = new Meteor(this, "some_socket_it_doesn't_matter");
    mMeteor.setCallback(this);
}

}


public class ListOfElements extends ListFragment implements MeteorCallback{

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    String subscriptionId = Login.mMeteor.subscribe("notifications");
    Log.d("Log", subscriptionId);
}

}

我不明白我必须如何使用订阅或如何从服务器获取集合。为什么 github 仓库中只有 insert 方法而没有 get 方法?我真的不知道如何编写代码来获取集合、使用订阅等等。网络上没有任何可以理解的解释。拜托,你能帮我解释一下如何在这段代码中实现获取、订阅吗?

Meteor 有两个特别之处:它异步工作,并且专门为实时应用程序设计。因此它有一些不同的概念来检索数据和一些其他任务。

同步 应用程序中,您只需调用 insert(...) 并立即获取方法的 return 值,例如success/error 的布尔值或已插入行数的数值。

您将调用 get(...) 并立即收到一组行作为该方法的 return 值。

但在 Meteor 中,一切都是异步的。这意味着您不会立即获得结果,而是在几(毫秒)秒后通过回调方法获得结果。

当您调用 insert(...) 时,这并不像您注意到的那样重要。您只需调用此方法并且通常会忘记结果,即您不会等待并检查结果,因为插入通常是成功的。但是这个方法仍然是异步的,你可以(有时应该)再次监听几(毫秒)秒后到达的结果。

当您想调用 get(...) 时,这在理论上是可行的,重要的一点是它是异步的。所以你会说 "get me all chat messages from the last 5 minutes"。像往常一样,会有 no 结果或 return 值,但结果会在您定义的回调方法中异步地在短时间内到达。这就是 onDataAdded(...)onDataChanged(...)onDataRemoved(...) 的用途。

现在还不清楚为什么不能调用 get(...) 并等待数据到达这些方法。

这个问题的答案是 Meteor 是为实时应用而设计的。这就是为什么你不能说 "get me all chat messages from the last 5 minutes"。相反,你必须说 "I want to subscribe to all chat messages from the last 5 minutes and always be updated about changes".

因此,在 Meteor 中,您 订阅 数据集,而不是通过 get(...).

请求它们

总而言之,这意味着以下内容:

  1. 如果您想获取一些消息,您可以订阅 包含这些消息的数据集。
  2. 发送初始行 (!) 以及将新行添加到集合中时,您会在 onDataAdded(...) 回调中收到这些行。修改行时,您会在 onDataChanged(...) 回调中收到这些更改。最后,当行被删除时,您会在 onDataRemoved(...) 回调中收到关于这些删除的通知。
  3. 当您不想再获取数据集的更新时,您可以取消订阅 该数据集。这是可选的。

在您的 Android 应用程序中使用 Android-DDP 库,它转换为以下内容:

  1. final String subscriptionId = mMeteor.subscribe("chats");
  2. public void onDataAdded(String collection, String docID, String json) { ... }
  3. mMeteor.unsubscribe(subscriptionId);

如您所见,您真正要学习的是 Meteor 而不是库 Android-DDP。 Meteor 有一些必须理解的新概念。但是当您了解 Meteor 的工作原理时,将这些东西转换为 Android-DDP 真的很简单,只需查找方法名称即可。