2016-11-30 12 views
0

私はAndroid Appをやっています。私はFirebaseに書いて成功していますが、FirebaseからListViewへの読み込みに問題があります。誰もがデータを取得して、リストビューへのアプリケーションの読み込みを手伝うことができたら、3つのアイテムをすべて取得しようとすると、試して読み返すアイテムが1つだけあれば動作します。 私は構造と私のコードのアイデアを得るためにデータベースの写真を含めました。FirebaseのデータをListViewに取り込む方法は?

enter image description here

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.firebase.client.DataSnapshot; 
import com.firebase.client.Firebase; 
import com.firebase.client.FirebaseError; 
import com.firebase.client.ValueEventListener; 
import com.google.firebase.database.DatabaseError; 
import com.google.firebase.database.FirebaseDatabase; 

import java.util.ArrayList; 

public class Admin_ViewEvent extends AppCompatActivity { 

    // private TextView textViewPersons; 
private ListView mListView; 
private ArrayList<String> mMeetings = new ArrayList<>(); 
private Firebase mRef; 

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

    mRef = new Firebase("https://saica-sgb-77a4f.firebaseio.com/Meetings"); 
    mListView = (ListView) findViewById(R.id.ListView); 
    //textViewPersons = (TextView) findViewById(R.id.textViewPersons); 

    final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mMeetings); 
    mListView.setAdapter(arrayAdapter); 

    mRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) 
     { 
      for(DataSnapshot childSnapShot : dataSnapshot.getChildren()) { 

       String date = (String) childSnapShot.child("address").getValue(); 
       String datetime = (String) childSnapShot.child("datetime").getValue(); 
       String name = (String) childSnapShot.child("name").getValue(); 

       mMeetings.add(date); 
       mMeetings.add(datetime); 
       mMeetings.add(name); 

      } 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      System.out.println("The read failed: " + firebaseError.getMessage()); 
     } 
    }); 

} 
} 
+0

コードの問題点は何ですか?私がすぐに見るのは、あなたが 'onDataChange()'で 'arrayAdapter.notifyDataSetChanged()'を呼び出すことができないことだけです。 'ChildEventListener'の使用をお勧めします。これは、リストビューをより細かく更新して、画面のちらつきを少なくすることができるためです。 –

+0

@FrankvanPuffelenこんにちは、Firebaseの各アイテムが独自のアイテムになるたびに、各アイテムを独自のリストに入れていきます。たとえば、最初のキーの3つの項目をグループ化して表示する必要があります。 –

+0

明確な使用例のように聞こえます。現在のコードについては何ができませんか? –

答えて

1

あなたはFirebase UI libraryを使用することができます。

だけで依存関係を追加:

dependencies { 
    // FirebaseUI Database only 
    compile 'com.firebaseui:firebase-ui-database:1.0.1' 
} 

その後、あなたのオブジェクトをマッピングするために単純なクラスを定義します。

public class MyObject { 

    private String name; 
    private String address; 
    private String dateTime; 

    public MyObject() { 
    } 
    .... 

} 

それからちょうどのようなものを使用します。

mRef = new Firebase("https://saica-sgb-77a4f.firebaseio.com/Meetings"); 
mListView = (ListView) findViewById(R.id.ListView); 
mAdapter = new FirebaseListAdapter<MyObject>(this, MyObject.class, R.layout.myLayout, mRef) { 
     @Override 
     protected void populateView(View view, MyObject myObj, int position) { 
      //Set the value for the views 
      ((TextView)view.findViewById(R.id.xxx)).setText(myObj.getName()); 
      //... 
     } 
    }; 
    mListView.setAdapter(mAdapter); 
+0

Firebase UIを試してみたところ、Firebaseui以外の方法はありませんでした。アプリで問題が発生しているようです。 –

+0

@ JNR_Prog123あなたのアプリで使用されるfirebaseのバージョンに応じて適切なバージョンを選択する必要があります。 これは単なるアダプタです。https://github.com/firebase/FirebaseUI-Android/blob/master/database/src/main/java/com/firebase/ui/database/FirebaseListAdapter.java –

1

使用ChildEventListenerをして​​置きますあなたのコード:
final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String(this,android.R.layout.simple_list_item_1, mMeetings); mListView.setAdapter(arrayAdapter);公共の文字列の日付;パブリック文字列の時間;
// DataSnapshot.getValue(User.class) public User() {}public User(String name, String time, String date) {this.name = name; this.time= time;this.date=date;}への呼び出しに必要な//デフォルトコンストラクタfirebase パブリッククラスユーザー{公共の文字列名からデータを取得するためのonChildAdded内部

....
またcreatのModelクラス
お手数ですが

関連する問題