我正在制作类似于WhatsApp的Android应用程序.在应用程序中,用户可以发送文本和图像.要保存邮件以便可以离线查看,我使用了:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Run Code Online (Sandbox Code Playgroud)
我想知道firebase如何离线存储消息.
它是否创建了一个类似于常用sqlite的本地数据库?
我们目前正在使用 Firebase 作为构建聊天应用程序的后端,并且我们正在显着增长。我们使用 Firebase 是因为它提供了实时同步和离线支持,从而缩短了我们的上市时间。
但在不久的将来,我们计划迁移到我们自己的服务器节点蒙戈事业的定价实时数据库过于高+我们要工作下了很大的限制使用火力的时候。
有人可以建议我们如何将我们的数据直接从 firebase 迁移到自己的服务器以及在这种情况下需要记住哪些事情。
我有一个项目列表,每个项目都有一个名称和一个删除按钮.
我的populateViewHolder方法
@Override
protected void populateViewHolder(SubChannelViewHolder viewHolder, final SubChannel model, final int position) {
//passing a clickListener to viewHolder,viewHolder in turn decides to which view it should assign this clickListener.
viewHolder.bindToSubChannel(model, new View.OnClickListener() {
@Override
public void onClick(View view) {
String key= getRef(position).getKey();//Getting the key of the subChannel item
Map<String,Object> childUpdates=new HashMap<>();
//The positions where the subChannel was stored
childUpdates.put("/channels-subChannels/"+mChannelKey+"/" +key+"/subChannelName/",null);
childUpdates.put("/channels/" + mChannelKey+"/subChannels/"+key+"/subChannelName/", null);
childUpdates.put("/user-channels/" +getUid()+"/"+ mChannelKey+"/subChannels/"+key+"/subChannelName/", null);
//setting values at these location as null thereby doing …Run Code Online (Sandbox Code Playgroud) android firebase android-recyclerview firebase-realtime-database firebaseui
我已经阅读了很多相关的stackoverflow问题
ServerValue.TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在我的应用程序中使用它。
我需要获取创建帖子的时间戳。时间戳应添加到与 uid 、作者等相同的位置。
将帖子写入firebase 数据库的代码片段:
private void writeNewPost(String userId, String username, String title, String body) {
// Create new post at /user-posts/$userid/$postid and at
// /posts/$postid simultaneously
String key = mDatabase.child("posts").push().getKey();
Post post = new Post(userId, username, title, body);
Map<String, Object> postValues = post.toMap();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/posts/" + key, postValues);
childUpdates.put("/user-posts/" + userId + "/" + key, postValues);
mDatabase.updateChildren(childUpdates);
}
Run Code Online (Sandbox Code Playgroud)
我的Post.java文件
@IgnoreExtraProperties
public class Post {
public String uid;
public …Run Code Online (Sandbox Code Playgroud) 我正在使用firebase构建一个应用程序作为我的后端.
我使用了ServerValue.TIMESTAMP并将一个写操作的unix时间存储在一个名为的变量中timeStamp.
我所执行的下面线及有下方的红线new SimpleDateFormat("H:mm",Locale.US);和format.
hovertext读取:
"Call requires API level 24 (current min is 15) android.icu.text.SimpleDateFormat#SimpleDateFormat
Run Code Online (Sandbox Code Playgroud)
这是我在RecyclerView.ViewHolder类中的代码:
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("H:mm");
simpleDateFormat.format(timeStamp));
noticeTimeStampTextView.setText(simpleDateFormat);
Run Code Online (Sandbox Code Playgroud)
在按下运行按钮后,我得到了这个:
Error:(32, 32) error: no suitable method found for setText(SimpleDateFormat)
method TextView.setText(CharSequence) is not applicable
(argument mismatch; SimpleDateFormat cannot be converted to CharSequence)
method TextView.setText(int) is not applicable
(argument mismatch; SimpleDateFormat cannot be converted to int)
Run Code Online (Sandbox Code Playgroud)
我该怎么解决这个问题?
我使用以下命令在此网站https://firebase.googleblog.com/2016/08/sending-notifications-between-android.html上运行了节点代码:
node app
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError: request.ref is not a function.
Run Code Online (Sandbox Code Playgroud)
对应于以下行:
sendNotificationToUser("username","new msg",function() {request.ref().remove();} );
Run Code Online (Sandbox Code Playgroud)
这是我的package.json文件:
{
"name": "myApp",
"version": "1.0.1",
"description": "listen for addition of msgs",
"main": "app.js",
"scripts": {
"start": "node app.js",
"monitor": "nodemon app.js",
"deploy": "gcloud app deploy"
},
"author": "my name",
"engines": {
"node": "~4.2"
},
"license": "ISC",
"dependencies": {
"firebase": "^3.2.1",
"request": "^2.74.0"
}
}
Run Code Online (Sandbox Code Playgroud)