【发布时间】:2017-10-02 10:34:55
【问题描述】:
我有一个Activity,我必须在其中使用另一个类 DataBase 中的函数。在DataBase 代码必须从我的FireBase 数据库 中获取信息,然后返回ArrayList 作为结果。但是当我在null 中使用函数takeDataFromFirebase 我的数组时,它的大小是null。如何将带有 FireBase 信息的数组用于我的活动?
public class DataBase{
public ArrayList<String> arraylist = new ArrayList<>();
public ArrayList<String> takeDataFromFirebase(DatabaseReference dRef) {
usersRef = dRef.child(USERS_CHILD);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userKey = ds.getKey();
DatabaseReference messagesRef = usersRef.child(userKey).child(USER_MESSAGES);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
messageText = dSnapshot.child(USER_MESSAGE_TEXT).getValue(String.class);
arrayList.add(messageText);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(eventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(valueEventListener);
return null;
}
}
以及我使用此方法的活动:
public class Categories extends AppCompatActivity{
private static final String TAG = "CATEGORIES";
FirebaseAuth mAuth;
private ListView all_problems_list_view;
private Button add_problem_button, signOut;
private static long back_pressed;
FirebaseDatabase mDataBase;
DatabaseReference dRef;
DatabaseReference userRef;
DataBase dataBaseFunctions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layout.activity_categories);
dataBaseFunctions = new DataBase();
mAuth = FirebaseAuth.getInstance();
mDataBase = FirebaseDatabase.getInstance();
dRef = mDataBase.getReference();
userRef = dRef.child("Users");
//region add all items
all_problems_list_view = (ListView) findViewById(id.all_problems_list_view);
add_problem_button = (Button) findViewById(id.add_problem_button);
signOut = (Button) findViewById(id.SignOutBut);
//endregion
//region set onClick to buttons
signOut.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
logout();
}
});
add_problem_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(Categories.this, sendEmailActivity.class));
}
});
//endregiond
ArrayList<String> list = dataBaseFunctions.takeDataFromFirebase(dRef);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, list);
all_problems_list_view.setAdapter(adapter);
}
【问题讨论】:
-
takeDataFromFirebase返回null那么您的预期是什么?就像成千上万个类似的问题一样,答案是:您应该学习如何使用异步 API(使用回调) -
我重写了我的代码,添加了异步方法
doInBackground,但我不明白为什么我的数组为空,抱歉这个愚蠢的问题,但忠诚,我只是初学者。如何将我下载到我的活动的信息返回?我需要做什么?
标签: android firebase arraylist firebase-realtime-database