2017-11-23 11 views
0

Firebaseデータベースには、Global_downloadsというディレクトリがあり、そこにはいくつかの子があります。Firebaseデータベースから子の名前を取得する

子供( "キャスティングアプリ")私はAppTypeと呼ばれる文字列値を使用して私のアプリケーションコードで見つけることができます。

次の子(「すべてのキャスト」)は、必要な子です。私はlistviewでonitemのクリックを使ってfirebaseに入れることができます。それは子供の形でfirebaseにそれを送ります。

しかし、どのように子供(Allcast)の名前をプログラムで見つけることができますか?だから私はダウンロードの数を得ることができますか?ここ

enter image description here

私の子供のリスナー

@Override 
public void onChildAdded(final com.firebase.client.DataSnapshot dataSnapshot, String s) { 
String counter = dataSnapshot.child("Global_downloads").child(Apptype). 
      child("I need this child").child("downloads").getValue(String.class); 
    Downloadscount.add(counter); 

String[] arr3 = Downloadscount.toArray(new String[Downloadscount.size()]); 

コンストラクタ内のアイテムの残りのための私のコードで、これは私のリストビューで

///my custom adapter where it returns the info to my listview 
apkData = new dataListAdapter(mContext, arr, arr1, arr2, mrootRef, Apptype,arr3); 
    mlv.setAdapter(apkData); 
     apkData.notifyDataSetChanged(); 


    mlv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 


      final Firebase ref = mrootRef.getRef(); 

//here is where i assign the name to firebase in my counter class which works 
      apkNames = AppNameList.get(i).toString(); //this is the name i want to send back to the top and use as a Child name.or can i get the child name another way. 
gc = new Global_counter(ref,Apptype,apkNames); 
      gc.App_DownLoadCounter(); 

私のリストビューで他の項目のためのものですAllcast以外の私のリストには多くのアイテムがあります。 がダウンロードされた唯一のアイテムです。より多くの項目が押されると、その名前もリストに追加されます。あなたが見ることができるテキストビューは、ダウンロードがダウンロードされたcorespondingアイテムを取得するには

enter image description here

答えて

1

を追加しようとイムされ、onItemClick()メソッド内のコードの次の行を使用して、ちょうどあなたのDatabaseReference内で使用してください。

次のコードを使用してくださいダウンロードの数を取得するには、 Global_downloadsノードがあなたのFirebaseルートの直接の子であり、 downloadsの値はタイプ Integerであると仮定すると
String downloadName = (String) adapterView.getItemAtPosition(i); 

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
DatabaseReference downloadsRef = rootRef.child("Global_downloads").child(Apptype).child(downloadName).child("downloads"); 
ValueEventListener eventListener = new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     int downloads = dataSnapshot.getValue(Integer.class); 
     Log.d("TAG", downloads); 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}; 
downloadsRef.addListenerForSingleValueEvent(eventListener); 

あなたの出力を次のようになります。

0 
+0

同様key->value

としてデータを読み込む必要があり申し訳アレックス・リスト内の他の項目があるすべてのキャストは、ダウンロードのみの項目です。他のアイテムがダウンロードされている場合は、そのアイテムも追加されます。私のリストビューの外観のスクリーンショットを追加する – markharrop

+1

ListViewにそれらの名前(すべてのキャストなど)を表示していますか? –

+0

はいalexですが、アイテムが発効するまで子の名前はわかりません。常にnullを返します。 – markharrop

0

あなたの状況では、キーがApptypeで、値はdownloadsです。 私はrootの参照の下でGlobal_dowbloadsと仮定しています。

アプリ名を持つすべてのダウンロードを取得するには、あなたがこの

DatabaseReference mRef = FirebaseDatabase.getInstance().getReference(); 
     mRef.child("Global_downloads").child(Apptype) 
       .addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         for(DataSnapshot snapshot: dataSnapshot.getChildren()){ 
          Log.v("app_name", snapshot.getKey()); 
          Log.v("app_downloads", snapshot.getValue(String.class)); 
         } 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 
+0

これはどうしたのですか。 childeventリスナを使っています。私が直面している唯一の問題は、リストビューに新しいアイテムを追加することです。ダウンロード値と比較します。これは、私がアプリケーションを閉じて再起動するまで起こります。私は私のリストアダプターに戻ってdatを再送する必要があると仮定しています。 – markharrop

+0

あなたのアンドロイドプロジェクトにアプリダウンロードモデルクラス**を作成し、そこに_attributes_を追加する必要があります。その後、**ダウンロードモデル**のリストをアレイアダプタに渡して、データを表示する必要があります(リアルタイムデータ処理と互換性があります) –

+0

ダウンロードモデルですか? – markharrop

関連する問題