让我开始解释我的问题。有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?我真的不知道如何使代码获取集合,使用订阅等。网络中没有任何可理解的解释。请您解释如何在此代码中实现获取,订阅,以帮助我。
答案 0 :(得分:1)
Meteor有两个特别之处:它以异步工作,它专为实时应用而设计。因此,它有一些不同的概念来检索数据和其他一些任务。
在同步应用程序中,您只需调用insert(...)
并立即获取方法的返回值,例如:成功/错误的布尔值或已插入的行数的数值。
您可以调用get(...)
并立即收到行集合作为方法的返回值。
但在Meteor中,一切都是异步。这意味着在回调方法中,您不会立即获得结果,而是在几(毫秒)之后得到结果。
当你致电insert(...)
时,这并不是那么重要,正如你所注意到的那样。您只需调用此方法并经常忘记结果,即您不等待并检查结果,因为插入通常是成功的。但是这种方法仍然是异步的,你可以(有时应该)监听结果,这会在几(毫秒)之后再次出现。
如果你想打电话给get(...)
,理论上这是可能的,重要的一点是它是异步的。所以你会说"给我收听过去5分钟内的所有聊天消息"。像往常一样,会有 no 结果或返回值,但结果会在您定义的回调方法中以异步方式稍后到达。这是onDataAdded(...)
,onDataChanged(...)
和onDataRemoved(...)
的用途。
现在还不清楚,为什么你不能打电话给get(...)
并等待数据到达这些方法。
该问题的答案是Meteor专为实时应用而设计。这就是为什么你不能说'#34;从过去的5分钟里得到我所有的聊天消息"。相反,您必须说"我想订阅过去5分钟内的所有聊天消息,并始终更新有关更改"。
因此,在Meteor中,您订阅到数据集,而不是通过get(...)
请求它们。
总而言之,这意味着以下内容:
onDataAdded(...)
回调中的行。修改行后,您会在onDataChanged(...)
回调中收到这些更改。最后,当删除行时,系统会通知您onDataRemoved(...)
回调中的这些删除。Android应用程序中的Android-DDP库可转换为以下内容:
final String subscriptionId = mMeteor.subscribe("chats");
public void onDataAdded(String collection, String docID, String json) { ... }
mMeteor.unsubscribe(subscriptionId);
正如您所看到的,您需要学习的是Meteor,而不是Android-DDP库。 Meteor有一些必须要理解的新概念。但是当你知道Meteor如何工作时,将这些东西翻译成Android-DDP非常简单,只需要查找方法名称。