- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我正在制作一个应用程序,其中使用 firebase
并尝试检索实时数据库
,就像我在 firebase 存储中存储图像
并复制“下载 URL”链接并将其粘贴到 firebase 数据库中,以便每当我运行我的应用程序时,应该有一个图像,其标题和描述应该出现在下面。我基本上想将图像、标题和描述添加到 firebase 数据库并在应用程序中检索。
Activity_main:--
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recyclerview">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
个人行:-
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<ImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:src="@mipmap/ic_launcher_round"
android:id="@+id/image"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:text="title"
android:id="@+id/title"/>
<TextView
android:layout_width="match_parent"
android:textColor="#000000"
android:layout_height="wrap_content"
android:text="description"
android:id="@+id/description"/>
</LinearLayout>
</android.support.v7.widget.CardView>
Firebase 数据库规则:--
{
"rules": {
".read": "true",
".write": "true"
}
}
Firebase 存储规则:--
service firebase.storage {
match /b/{bucket}/o {
match[enter image description here][1] /{allPaths=**} {
// Allow access by all users
allow read, write;
}
}
}
主要 Activity :--
package com.namy86.dtunews;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private DatabaseReference myref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=(RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
myref= FirebaseDatabase.getInstance().getReference().child("/blog");
FirebaseRecyclerAdapter<Blog,BlogViewHolder> recyclerAdapter=new FirebaseRecyclerAdapter<Blog,BlogViewHolder>(
Blog.class,
R.layout.individual_row,
BlogViewHolder.class,
myref
) {
@Override
protected void populateViewHolder(BlogViewHolder viewHolder, Blog model, int position) {
viewHolder.setTitle(model.getTitle());
viewHolder.setDescription(model.getDescription());
viewHolder.setImage(model.getImage());
}
};
recyclerView.setAdapter(recyclerAdapter);
}
public static class BlogViewHolder extends RecyclerView.ViewHolder {
View mView;
TextView textView_title;
TextView textView_decription;
ImageView imageView;
public BlogViewHolder(View itemView) {
super(itemView);
mView=itemView;
textView_title = (TextView)itemView.findViewById(R.id.title);
textView_decription = (TextView) itemView.findViewById(R.id.description);
imageView=(ImageView)itemView.findViewById(R.id.image);
}
public void setTitle(String title)
{
textView_title.setText(title+"");
}
public void setDescription(String description)
{
textView_decription.setText(description);
}
public void setImage(String image)
{
Picasso.with(mView.getContext())
.load(image)
.into(imageView);
}
}
}
博客( Activity ):--
package com.namy86.dtunews;
public class Blog {
private String title,description,image;
public Blog() {
}
public Blog(String title, String description, String image) {
this.title = title;
this.description = description;
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
}
Firebase 数据库结构:-
demofirebase-1faa
帖子1
-Description1="First Post"
-Image1="https://firebasestorage.googleapis.com/v0/b/demofirebase-1faaa.appspot.com/o/Unknown.jpg?alt=media&token=6f5ade3c-d615-4871-90a0-1b4a55e6e00c"
-Title1="Namy"
帖子2
-Description2="Second Post"
-Image2="https://firebasestorage.googleapis.com/v0/b/demofirebase-1faaa.appspot.com/o/Unknown.jpg?alt=media&token=6f5ade3c-d615-4871-90a0-1b4a55e6e00c"
-Title2="Naman"
最佳答案
假设您已经正确配置了项目,您可以通过获取引用、创建新节点(正如 Alex Mamo 所说,没有特定节点就无法发送它)并拟合您的对象,将数据发送到 Firebase在里面。见下文:
// get your reference
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
// refer your child and use push to generate a new unique node, then put your object
reference.child("blog").push().setValue(blog);
连接 firebase 和适配器可以通过两种方式完成:在检索对象时显示对象或一次显示全部对象。
创建一个接收项目的接口(interface):
public interface ItemListener<T> {
void onItemAdded(@NonNull final T item);
void onItemRemoved(@NonNull final T item);
}
在您的 DAO 中,创建一个方法来从博客节点获取所有对象:
public void getBlogList(@NonNull final ItemListener listener) {
FirebaseDatabase.getInstance().getReference().child("blog").orderByKey()
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
final Blog blog = dataSnapshot.getValue(Blog.class);
listener.onItemAdded(blog);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
final Blog blog = dataSnapshot.getValue(Blog.class);
listener.onItemRemoved(blog);
}
@Override public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
@Override public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override public void onCancelled(DatabaseError databaseError) {}
});
}
在适配器内,在构造函数中调用上述方法,将收到的博客发送到列表并通知:
public class Adapter extends RecyclerView.Adapter<BlogViewHolder> {
private List<Blog> mBlogList;
public Adapter() {
getBlogList(new ItemListener<Blog>() {
@Override
public void onItemAdded(@NonNull final Blog blog) {
mBlogList.add(blog);
notifyItemInserted(mBlogList.size);
}
@Override
public void onItemRemoved(@NonNull final Blog blog) {
for (Integer i = 0; i < mBlogList.size(); i++) {
final Blog innerBlog = mBlogList.get(i);
// since you don't store a key, you gotta check all attributes
if (innerBlog.getTitle.equals(blog.getTitle) &&
innerBlog.getDescription.equals(blog.getDescription) &&
innerBlog.getImage.equals(blog.getImage)) {
mBlogList.remove(innerBlog);
notifyItemRemoved(i);
}
}
}
});
}
@Override
public BlogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new BlogViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.individual_row, parent, false));
}
@Override
public void onBindViewHolder(BlogViewHolder holder, int position) {
final Blog blog = holder.get(position);
holder.setTitle(blog.getTitle());
holder.setDescription(blog.getDescription());
holder.setImage(blog.getImage());
}
@Override
public int getItemCount() {
return mBlogList.size();
}
}
创建一个接收列表的接口(interface):
public interface ListListener<T> {
void onListRetrieved(@NonNull final List<T> list);
}
在您的 DAO 中,创建一个方法以从博客节点一次性获取所有对象:
public void getBlogList(@NonNull final ListListener listener) {
final List<Blog> blogList = new ArrayList<>();
FirebaseDatabase.getInstance().getReference().child("blog")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (final DataSnapshot innerDataSnapshot : dataSnapshot.getChildren()) {
final Blog blog = innerDataSnapshot.getValue(Blog.class);
blogList.add(blog);
}
listener.onListRetrieved(blogList);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
在适配器内部,在构造函数中调用上述方法,克隆接收到的列表并通知:
public class Adapter extends RecyclerView.Adapter<BlogViewHolder> {
private List<Blog> mBlogList;
public Adapter() {
getBlogList(new ListListener<Blog>() {
@Override
public void onListRetrieved(@NonNull final List<Blog> blogList) {
mBlogList.addAll(blogList);
notifyDataSetChanged();
}
});
}
// same code as first Adapter
}
然后,您可以将此适配器添加到您的RecyclerView
中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
recyclerView.setAdapter(new Adapter());
}
关于java - Firebase 使用 Cardview 检索实时数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47814558/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!