2

让我开始解释我的问题。有一些解释的存储库,但没有方法如何从 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方法?我真的不知道如何制作代码来获取收藏、使用订阅等。网络中没有任何可以理解的解释。请您通过解释如何实现获取,订阅此代码来帮助我。

4

1 回答 1

1

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

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

您将调用get(...)并立即接收一组行作为方法的返回值。

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

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

当您想调用get(...)时,这在理论上是可能的,重要的一点是它是异步的。所以你会说“把过去 5 分钟内的所有聊天消息给我”。像往常一样没有结果或返回值,但结果会在您定义的回调方法中异步地稍后到达。这就是onDataAdded(...),onDataChanged(...)并且onDataRemoved(...)是为了。

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

这个问题的答案是 Meteor 是为实时应用程序设计的。这就是为什么您不能说“让我获取过去 5 分钟内的所有聊天消息”。相反,您必须说“我想订阅过去 5 分钟内的所有聊天消息,并随时了解更改”。

因此,在 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 非常简单,只需查找方法名称即可。

于 2015-12-13T15:30:23.883 回答