2017-01-02 9 views
0

私は現在、6桁のint id(値)とそれらが記録された時刻/日付(リアルタイムデータベース)を記録するアプリケーションを作成しています。私はデータベースのキー値をリストに項目としてリストし、IDを検索するための検索クエリを付けて、別のアプリケーションを作成しようとしています。リストビューでFirebaseデータベースからデータをリストするには?

私の質問は、キーと値の両方を取得し、リストビューのアイテムとして表示する方法です。アイテムはリアルタイムで追加する必要があるため、Firebaseコンソールのように表示することができます。ありがとう!

+1

まだ試しましたか?関連するコードスニペットを共有します。 –

+0

sry、それ以降の質問のために覚えておきます。ありがとう! –

答えて

1
public ArrayList<String> arr; 
public ArrayAdapter adapter; 

@Override 
protected void onStart() { 
    super.onStart(); 

    DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); 
    arr = new ArrayList<>(); 

    ValueEventListener listener = new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      map2list((Map) dataSnapshot.getValue()); 
      //formats the datasnapshot entries to strings 
      adapter.notifyDataSetChanged(); 
      //makes the ListView realtime 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      // Getting Post failed, log a message 
      System.out.println(databaseError.toException()); 
      // ... 
     } 
    }; 
    mDatabase.addValueEventListener(listener); 

    adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, android.R.id.text1, arr); 

    ListView listView = (ListView) findViewById(R.id.yourOwnListView); 
    listView.setAdapter(adapter); 


} 

public void map2list(Map<String,Long> map){ 

    arr.clear(); 
    for (Map.Entry<String, Long> entry : map.entrySet()) { 

     Long key = Long.parseLong(entry.getKey()); 
     String d = DateFormat.getDateTimeInstance().format(key); 
     Long value = entry.getValue(); 
     arr.add(d + ": " + value); 
    } 

} 

私自身のデータベースでこれをテストしています。

map2list()は、リストビューのデータを簡単にフォーマットするための方法です。これを行う最善の方法は、カスタム配列アダプターまたはbaseadapterを使用することですが、この例で必要とするより多くのコードが必要です。

同時に2つのログが作成された場合、衝突する可能性があるため、キーを時間として保持することはお勧めできません。

最後に、firebaseはints以上のLongsを使用するので、少ないコードでLongsを使用しました

+0

ありがとうございました!!!このコードは私のプロジェクトで完璧に機能しました。ところで、私のスキャナは1秒おきに1回アップロードするので、衝突は最初に問題になることはないと思いますが、とにかくそれを指摘してくれてありがとう。 –

+0

リストビュー項目にonItemClickListenerを追加し、firebaseデータベースとは異なるデータを表示している新しいアクティビティを開く場合はどうすればいいですか?出来ますか? – ASAP

+0

確かに可能ですが、この質問とは別です。これを行うには、適切なonItemClickListenerをリストビューに添付します。次に、onItemClick抽象メソッドで、リスト項目に関連する余分なものを含む新しいインテントを作成し、そのインテントを新しいアクティビティに向けます。 startActivityを呼び出した後、新しいアクティビティで必要なfirebase取得を行います。それは、あなたが新しいSOの質問を開き、私に私を指摘したいと思うならば、高いレベルの要点です。私は答えてくれるでしょう。 –

関連する問題