【问题标题】:Why I can't get my array from another class为什么我不能从另一个班级得到我的数组
【发布时间】: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


【解决方案1】:

您的函数 takeDataFromFirebase 返回 null,因此您的结果将始终为 null.. 用您想要获取的数组替换此 null,我猜是 arrayList。

【讨论】:

  • 打扰一下,但我是初学者,不明白为什么我的数组返回 null。我返回messageText 的日志值,它返回给我所有需要的信息。但是,当我使用这种方法时,我该如何返回这些信息呢?
  • 在您的函数takeDataFromFirebase 上,您唯一的回报是“null”。因此,当您调用它时,结果将为 null !我看到你在 DataBase 类上填写了arraylist。我想您尝试在 Categories 类上获取的正是这个数组。要得到它,它有点复杂,你必须在你的第二个类上实现一个监听器,它会检测 arraylist 何时被修改并更新你的适配器。
猜你喜欢
  • 2013-09-17
  • 2021-11-18
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
相关资源
最近更新 更多