2017-11-15 30 views
1

私はfirebaseを初めて使用しており、キー値の内容を取得できません。私はいくつかのことを試しましたが、すべて失敗しました。アンドロイドアプリのfirebaseのキーから値を取得するにはどうすればよいですか?

誰でもデータを取得してくれますか?

マイfirebaseデータベース - Firebaseデータベース構造:

enter image description here

私のコード -

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)); 
    } 
} 

答えて

0
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) { 

    } 
}); 

I'amあなたはclassPost内側ポストの値にしたいと仮定。

コードを説明する:

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

上記データベース内の位置への参照です。したがって、子( "admin")。子( "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(); 
    } 
    } 

は、データベースから値を取得することができるようにするリスナーです。 dataSnapshotclassPostです。あなたがdataSnapshot.getChildren()を書くときだから、これを実現するために、あなたにposts

+0

をあなたの答えを編集しました。なぜなら、大文字の 'F'で始まるJavaの' Forループ 'がないからです。より低い 'f'の統計値を持つ' forループ 'は1つだけです。 –

+0

はい、それはタイプミスで、それは問題ではありませんが、あなたが私の答えと同じように答えたことは文字通り同じです!!あなたはそれをコピーしてあなたの答えを書いたようです。 –

0

の値を与えるため、子どもたちの内部で反復されますあなたがclassPostの子供を取得し、その後dataされることを意味し、次のコードを使用してください:ちょうど

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); 
+0

なぜ私が書いたのと同じコードを書いて、いくつかの構文を変更すると、singlevalueeventlistenerを使用しています。これはリストです –

関連する問題