【问题标题】:How do I fetch the value from a key in firebase for my android app?如何从我的 android 应用程序的 firebase 中的键中获取值?
【发布时间】:2020-01-22 02:11:49
【问题描述】:

我对 firebase 很陌生,无法获取键值的内容。我尝试了几件事,但都没有成功。

谁能帮我获取数据吗?

我的 firebase 数据库 - Firebase 数据库结构:

我的代码 -

public class Dashboard extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private Toolbar dashboard_toolbar;
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mActionBarDrawerToggle;
    private FirebaseAuth mAuth;
    DatabaseReference rootRef, teacher, teacherPost;

    String str;
    TextView textView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);

      /*  str = (String) getIntent().getExtras().get("temp");*/
        textView = (TextView) findViewById(R.id.institute_news);

        mAuth = FirebaseAuth.getInstance();
        dashboard_toolbar = (Toolbar) findViewById(R.id.dashboard_toolbar);
        setSupportActionBar(dashboard_toolbar);
        getSupportActionBar().setTitle("Dashboard");
        dashboard_toolbar.setTitleTextColor(0xFFFFFFFF);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawable);
        mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, dashboard_toolbar, R.string.open, R.string.close);
        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
        mDrawerLayout.addDrawerListener(mActionBarDrawerToggle);
        mActionBarDrawerToggle.syncState();

        dashboard_toolbar.post(new Runnable() {
            @Override
            public void run() {
                Drawable d = ResourcesCompat.getDrawable(getResources(), R.drawable.actionmenu, null);
                dashboard_toolbar.setNavigationIcon(d);
            }
        });

        NavigationView navigationView = (NavigationView) mDrawerLayout.findViewById(R.id.navigationView);
        navigationView.setNavigationItemSelectedListener(this);


        rootRef = FirebaseDatabase.getInstance().getReference();
        teacher = rootRef.child("admin").child("classPost");
        teacherPost = teacher.child("post");



        String mGroupId = teacherPost.push().getKey();
        Toast.makeText(this, "" + teacherPost, Toast.LENGTH_SHORT).show();
        textView.setText(mGroupId);


    }



    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawable);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.nav_menu, menu);
        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (mActionBarDrawerToggle.onOptionsItemSelected(item))
            return  true;
        return super.onOptionsItemSelected(item);
    }


    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.aboutUs) {

        } else if (id == R.id.help) {

        } else if (id == R.id.report) {


        } else if (id == R.id.logoutmenu) {

            mAuth.signOut();
            sendToStart();
        } else if (id == R.id.setting) {

        }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawable);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }




    public void getAttendance(View view) {
        Toast.makeText(this, "Attendance Details Apk Fire here", Toast.LENGTH_LONG).show();
    }

    public void trackChild(View view) {

        Toast.makeText(this, "child tracker apk fire here Here", Toast.LENGTH_LONG).show();
    }

    public void getEwallet(View view) {

        Toast.makeText(this, "Ewallet Apk Fire Here", Toast.LENGTH_LONG).show();

    }

    public void getHealth(View view) {
        Toast.makeText(this, "Health apk fire here", Toast.LENGTH_LONG).show();

    }

    public void getMessageBoardDetails(View view) {
        startActivity(new Intent(this,MessageBoard.class));
    }

    public void startChat(View view) {

        startActivity(new Intent(this,Chat.class));
    }

    private void sendToStart() {
        startActivity(new Intent(Dashboard.this,Start.class));
        finish();
    }

    public void readMore(View view) {

        startActivity(new Intent(this,InstituteMessageBoard.class));
    }
}

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:
    DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("admin").child("classPost");
    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data : dataSnapshot.getChildren()){
         String retrieveposts=data.child("posts").getValue().toString();
        }
        }
     @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    });
    

    我假设您希望帖子的值包含在 classPost 中。

    解释代码:

     DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("admin").child("classPost");
    

    以上是对数据库中位置的引用。所以 child("admin").child("classPost").您指的是节点 admin 下的节点 classPost 的位置,因此使用 child(node_name)

    现在这个:

    ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data : dataSnapshot.getChildren()){
         String retrieveposts=data.child("posts").getValue().toString();
        }
        }
    

    是一个能够从数据库中检索值的侦听器。 dataSnapshot 这里是classPost。因此,当您编写dataSnapshot.getChildren() 时,这意味着您正在获取classPost 的孩子,然后data 将在孩子内部进行迭代,从而为您提供posts 的值

    【讨论】:

    • 刚刚编辑了您的答案,因为 Java 中没有以大写 F 开头的 For loop。只有一个for loop 的统计数据低于f
    • 是的,这是一个错字,这不是问题,但我的意思是你的回答和我的回答一样!就像你复制它并写下你的答案一样。
    【解决方案2】:

    为此,请使用以下代码:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference classPostRef = rootRef.child("admin").child("classPost");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String post = ds.child("post").getValue(String.class);
                Log.d("TAG", post);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    classPostRef.addListenerForSingleValueEvent(eventListener);
    

    【讨论】:

    • 你为什么要写和我写的一样的代码,只是改变几个语法,而你使用的是单值事件监听器..这是一个列表
    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2021-12-25
    • 2013-04-20
    • 2017-09-03
    • 2017-09-29
    相关资源
    最近更新 更多