从Firebase Onchange方法中获取数据



您好,我正在开发一个Android应用程序,使用Firebase,我在尝试从Firebase Onchange方法中获取数据时遇到了问题。数据仅在方法内部可用,外部无效。更明确地,我有一系列数据包含一些名称和对firebase存储中图片的URL引用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非常感谢您的帮助和原谅我的英语错误=)

您需要保存onChanged()方法之外的数据。您可以将其保存在阵列列表中,并使用迭代器将其删除。这是使用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);

相关内容

  • 没有找到相关文章

最新更新