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

时间:2015-11-25 14:19:14

标签: android meteor collections 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?我真的不知道如何使代码获取集合,使用订阅等。网络中没有任何可理解的解释。请您解释如何在此代码中实现获取,订阅,以帮助我。

1 个答案:

答案 0 :(得分:1)

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

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

您可以调用get(...)并立即收到行集合作为方法的返回值。

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

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

如果你想打电话给get(...),理论上这是可能的,重要的一点是它是异步的。所以你会说"给我收听过去5分钟内的所有聊天消息"。像往常一样,会有 no 结果或返回值,但结果会在您定义的回调方法中以异步方式稍后到达。这是onDataAdded(...)onDataChanged(...)onDataRemoved(...)的用途。

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

该问题的答案是Meteor专为实时应用而设计。这就是为什么你不能说'#34;从过去的5分钟里得到我所有的聊天消息"。相反,您必须说"我想订阅过去5分钟内的所有聊天消息,并始终更新有关更改"。

因此,在Meteor中,您订阅到数据集,而不是通过get(...)请求它们。

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

  1. 如果您想收到一些消息,请订阅到包含这些消息的数据集。
  2. 当发送初始行(!)时,无论何时将新行添加到集合中,您都会收到onDataAdded(...)回调中的行。修改行后,您会在onDataChanged(...)回调中收到这些更改。最后,当删除行时,系统会通知您onDataRemoved(...)回调中的这些删除。
  3. 如果您不想再获取数据集的更新,则取消订阅。这是可选的。
  4. Android应用程序中的Android-DDP库可转换为以下内容:

    1. final String subscriptionId = mMeteor.subscribe("chats");
    2. public void onDataAdded(String collection, String docID, String json) { ... }
    3. mMeteor.unsubscribe(subscriptionId);
    4. 正如您所看到的,您需要学习的是Meteor,而不是Android-DDP库。 Meteor有一些必须要理解的新概念。但是当你知道Meteor如何工作时,将这些东西翻译成Android-DDP非常简单,只需要查找方法名称。