【问题标题】:getting data out of Firebase OnChange method从 Firebase OnChange 方法中获取数据
【发布时间】:2016-12-10 16:44:48
【问题描述】:

您好,我正在开发一个 Android 应用程序,使用 Firebase,我在尝试从 firebase onchange 方法中获取数据时遇到问题它不断从方法中返回 null,就像数据仅在方法内部可用一样,并且外面为空。 更明确地说,我有一个数据数组,其中包含一些名称和对 firebase 存储中图片的 url 引用,因此我获取了数组并将数据放入 textviews 等(所有这些都发生在 onchange 内部,因为外部数据是null ),当我想下载图片时,我需要使用另一种 firebase 方法,我收到此错误,我认为这是因为另一个内部有一个异步方法,该错误说明有关最大线程达到 128 或类似的东西这个,这是代码

 ideasListFireRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            HashMap<String, HashMap> ideasList = (HashMap<String, HashMap>) dataSnapshot.getValue();//getting list
            idsList = new ArrayList<>( ideasListFire.keySet()); //list of IDs of picture to get from firebase storage                               //method to get pictures from firebase storage
            imagesTab = new HashMap<>();
            while (i < idsList.size()) {
                final long ONE_MEGABYTE = 1024 * 1024;

                StorageReference storageRef = FirebaseStorage.getInstance().getReferenceFromUrl(ideasListFire.get(idsList.get(i)).get("mainPic").toString());
                storageRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                    @Override
                    public void onSuccess(byte[] bytes) {
                        // Got the download URL for 'users/me/profile.png'
                        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                        imagesTab.put(idsList.get(i), bmp);
                        // testim.setImageBitmap(bmp);
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle any errors
                    }
                });

这段代码给了我线程问题的错误 并且方法分开的其他代码在 Ids 列表中给出 null 导致 idsList 在 onDataChange 方法中为 null 非常感谢您的帮助和原谅我的英语错误 =)

【问题讨论】:

    标签: android firebase android-asynctask firebase-storage


    【解决方案1】:

    您需要在 onChanged() 方法之外保存数据。您可以将其保存在 ArrayList 中并使用迭代器将它们取出。下面是一个使用 onDataChanged 方法的例子:

    ValueEventListener postListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
    
            // Get Post object and use the values to update the UI
            Iterable<DataSnapshot> returns = dataSnapshot.getChildren();
    
            while(returns.iterator().hasNext())
            {
                Alarm al = returns.iterator().next().getValue(Alarm.class);
                GlobalData.totalAlarms.add(al);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
            // Getting Post failed, log a message
            Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
            // ...
        }
    };
    mDatabase.addValueEventListener(postListener);
    

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多