2016-10-21 9 views
3

firebaseでホストされているデータベースにデータをアップロードして、ユーザーが在庫を共同作業できるようにするアプリを書いています。私はそれにデータを書き込むことはできますが、変更されているデータなど、イベントがトリガされたときにデータを取得できるようにしたいだけです。私が望むのは、データベースに保存した文字列を取得し、それをページ上のTextView要素のテキスト値として設定することだけです。ボタンをクリックすると、これが発生します。これはどうすればいいですか?firebaseデータベースのデータをボタンクリックで取得する

はここで、ユーザがデータを書き込むページのコードです:私は、データを取得できるようにしたいところ

addButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DatabaseReference mDatabase; 
      mDatabase = FirebaseDatabase.getInstance().getReference(); 

      String dbLocationTag = location.getText().toString(); 
      String itemInfo = "Item Description: " + itemDescription.getText().toString() + "\n" + "Job Number: " + jobNumber.getText().toString(); 

      mDatabase.setValue(dbLocationTag, itemInfo); 

      Context context = getApplicationContext(); 
      final Intent inventoryHomeScreen = new Intent(); 
      inventoryHomeScreen.setClass(context, Inventory_Management.class); 
      startActivity(inventoryHomeScreen); 
     } 
    }); 

はここにあります:

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

    final TextView itemInfo = (TextView) findViewById(R.id.itemInfoTextView); 

    final Button viewButton = (Button) findViewById(R.id.viewButton); 
    assert viewButton != null; 
    viewButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      //I would like to set the text of itemInfo to the data I just wrote 

     } 
    }); 
} 
+0

あなたは、このための任意の解決策を見つけたのですか? –

+0

@VivekMishraまだありません – Xander

答えて

1

あなたはaddListenerForSingleValueEvent()にを使用する必要がありますデータを取得する

DatabaseReference mDatabase; 
mDatabase = FirebaseDatabase.getInstance().getReference(); 
mDatabase.child("<childName>").addListenerForSingleValueEvent(new ValueEventListener(){ 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
}); 

ここにchildあなたは、イベントがトリガされたときにデータを取得するためにaddValueEventListener()を使用することができますが、データベース全体の変更を取得するだけでchildを削除する場合はそれがmDatabase.addListenerForSingleValueEvent()

+0

これはデータベースに何らかの変更があった場合にのみ機能します –

0

のように見えるあなたの子ノード名

を言及する必要があります。あなたが書くことができますonClick()方法で

DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); 

// In the database whenever any data is changed then the below code snipped is going to be executed. 
mDatabase.child("<dbLocationTag>").addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       // the changed value is going to be stored into the dataSnapshot 
       // to retrieve value from dataSnapshot we write 

       String value = dataSnapshot.getValue(String.class); 
       mValueView.setText(value); 

       // NOTE: if you've multiple childs of same node then you can use Map to display all of them : EG: 
       /*Map<String, String> map = dataSnapshot.getValue(Map.class); 
       String val1 = map.get("val1"); 
       String val2 = map.get("val2"); 
       String val3 = map.get("val3"); 
       Log.v("TAG", "Value 1 "+val1); 
       Log.v("TAG", "Value 2 "+val2); 
       Log.v("TAG", "Value 3 "+val3); 
*/ 
      } 

      @Override 
      public void onCancelled(FirebaseError firebaseError) { 

       mValueView.setText(firebaseError.toString()); 

      } 
     }); 
+0

このコードを追加しましたが、ボタンを押してもテキストが表示されません。 – Xander

関連する問題