Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase存储OnSuccessListeners未及时成功_Android_Gridview_Firebase_Firebase Storage - Fatal编程技术网

Android Firebase存储OnSuccessListeners未及时成功

Android Firebase存储OnSuccessListeners未及时成功,android,gridview,firebase,firebase-storage,Android,Gridview,Firebase,Firebase Storage,经过彻底调试后,我得出结论,myGridView没有显示任何图像的原因是,当我从Firebase存储中获取缩略图和标题时,getData()中的myOnSuccessListeners和getImage()尚未成功 我在我的getData()方法中完成所有这一切,在用户在onActivityResult中选择他们的Google位置后调用该方法。该方法应实例化一个新的ImageItem(位图,字符串),但由于onSucessListeners尚未成功,因此返回空的ImageItem。有什么想法吗

经过彻底调试后,我得出结论,my
GridView
没有显示任何图像的原因是,当我从Firebase存储中获取缩略图和标题时,
getData()
中的my
OnSuccessListeners
getImage()
尚未成功

我在我的
getData()
方法中完成所有这一切,在用户在
onActivityResult
中选择他们的Google位置后调用该方法。该方法应实例化一个新的
ImageItem
(位图,字符串),但由于
onSucessListeners
尚未成功,因此返回空的
ImageItem
。有什么想法吗

    private void getData() {
        imageItems = new ArrayList<>();
        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child((String) p.getName()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
                FirebaseStorage storage = FirebaseStorage.getInstance();
                StorageReference httpsReference = storage.getReferenceFromUrl(myUrl);
                while (iter.hasNext()) {
                    hasImage = false;
                    hasTitle = false;
                    HashMap<String, String> m = (HashMap<String, String>) iter.next().getValue();
                    String v = m.get("url");
                    Log.d("url", v);

                    String bu = m.get("bucket");
                    Log.d("bucket", bu);
                    b = getImage(bu, v);
                    StorageReference iR = httpsReference.child(bu).child("thumb");

                    httpsReference.child(bu).getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
                        @Override
                        public void onSuccess(StorageMetadata storageMetadata) {
                            // Metadata now contains the metadata for 'images/forest.jpg'
                            t = storageMetadata.getCustomMetadata("title");
                            hasTitle = true;
                            Log.d("title", t);
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            Log.d("error", "ERROr");
                            // Uh-oh, an error occurred!
                        }
                    });


                    gridAdapter.data.add(new ImageItem(b, t, bu, v));


                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }



public Bitmap getImage(String bx, String vu) {
    FirebaseStorage storage = FirebaseStorage.getInstance();
    StorageReference httpsReference = storage.getReferenceFromUrl(myUrl);


    String v = vu;
    Log.d("url", v);

    String bu = bx;
    Log.d("bucket", bu);
    StorageReference iR = httpsReference.child(bu).child("thumb");

    final long ONE_MEGABYTE = 1024 * 1024;
    iR.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
        @Override
        public void onSuccess(byte[] bytes) {
            // Data for "images/island.jpg" is returns, use this as needed
            b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

            hasImage = true;
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Handle any errors
        }
    });
    return b;
}
}
private void getData(){
imageItems=新的ArrayList();
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference();
mDatabase.child((字符串)p.getName()).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
迭代器iter=dataSnapshot.getChildren().Iterator();
FirebaseStorage=FirebaseStorage.getInstance();
StorageReference httpsReference=storage.getReferenceFromUrl(myUrl);
while(iter.hasNext()){
hasImage=false;
黑斯特尔=假;
HashMap m=(HashMap)iter.next().getValue();
字符串v=m.get(“url”);
Log.d(“url”,v);
字符串bu=m.get(“bucket”);
对数d(“桶”,bu);
b=获取图像(bu,v);
StorageReference iR=httpsReference.child(bu.child)(“拇指”);
httpsReference.child(bu).getMetadata().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共void(存储元数据存储元数据){
//元数据现在包含“images/forest.jpg”的元数据
t=storageMetadata.getCustomMetadata(“标题”);
黑斯特尔=正确;
日志d(“标题”,t);
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
Log.d(“错误”、“错误”);
//哦,发生了一个错误!
}
});
添加(新的ImageItem(b,t,bu,v));
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
公共位图getImage(字符串bx、字符串vu){
FirebaseStorage=FirebaseStorage.getInstance();
StorageReference httpsReference=storage.getReferenceFromUrl(myUrl);
字符串v=vu;
Log.d(“url”,v);
字符串bu=bx;
对数d(“桶”,bu);
StorageReference iR=httpsReference.child(bu.child)(“拇指”);
最终长1兆字节=1024*1024;
iR.getBytes(一兆字节).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(字节[]字节){
//“images/island.jpg”的数据是返回的,根据需要使用它
b=位图工厂.decodeByteArray(字节,0,字节.长度);
hasImage=true;
}
}).addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理任何错误
}
});
返回b;
}
}
****************更新日期:2017年1月7日*********************

 private void getData() {
        imageItems = new ArrayList<>();
        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
        mDatabase.child((String) p.getName()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> iter = dataSnapshot.getChildren().iterator();
                FirebaseStorage storage = FirebaseStorage.getInstance();
                final StorageReference httpsReference = storage.getReferenceFromUrl("gs://socialnetwork-4b0c9.appspot.com");
                while (iter.hasNext()) {
                    hasImage = false;
                    hasTitle = false;
                    HashMap<String, String> m = (HashMap<String, String>) iter.next().getValue();
                    final String v = m.get("url");
                    Log.d("url", v);

                    final String bu = m.get("bucket");
                    Log.d("bucket", bu);
                    StorageReference iR = httpsReference.child(bu).child("thumb");
                    final long ONE_MEGABYTE = 1024 * 1024;
                    iR.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                        @Override
                        public void onSuccess(byte[] bytes) {
                            // Data for "images/island.jpg" is returns, use this as needed
                            b = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                            httpsReference.child(bu).getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
                                @Override
                                public void onSuccess(StorageMetadata storageMetadata) {
                                    // Metadata now contains the metadata for 'images/forest.jpg'
                                    t = storageMetadata.getCustomMetadata("title");
                                    hasTitle = true;
                                    gridAdapter.data.add(new ImageItem(b, t, bu, v));
                                    Log.d("title", t);
                                }
                            }).addOnFailureListener(new OnFailureListener() {
                                @Override
                                public void onFailure(@NonNull Exception exception) {
                                    Log.d("error", "ERROr");
                                    // Uh-oh, an error occurred!
                                }
                            });
                        }
                    }).addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            // Handle any errors
                        }
                    });


                }

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }
private void getData(){
imageItems=新的ArrayList();
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference();
mDatabase.child((字符串)p.getName()).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
迭代器iter=dataSnapshot.getChildren().Iterator();
FirebaseStorage=FirebaseStorage.getInstance();
最终存储引用httpsReference=storage.getReferenceFromUrl(“gs://socialnetwork-4b0c9.appspot.com”);
while(iter.hasNext()){
hasImage=false;
黑斯特尔=假;
HashMap m=(HashMap)iter.next().getValue();
最终字符串v=m.get(“url”);
Log.d(“url”,v);
最终字符串bu=m.get(“桶”);
对数d(“桶”,bu);
StorageReference iR=httpsReference.child(bu.child)(“拇指”);
最终长1兆字节=1024*1024;
iR.getBytes(一兆字节).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共void(字节[]字节){
//“images/island.jpg”的数据是返回的,根据需要使用它
b=位图工厂.decodeByteArray(字节,0,字节.长度);
httpsReference.child(bu).getMetadata().addOnSuccessListener(新的OnSuccessListener()){
@凌驾
成功时的公共void(存储元数据存储元数据){
//元数据现在包含“images/forest.jpg”的元数据
t=storageMetadata.getCustomMetadata(“标题”);
黑斯特尔=正确;
添加(新的ImageItem(b,t,bu,v));
日志d(“标题”,t);
}
})阿登夫先生
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PLACE_AUTOCOMPLETE_REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                Place place = PlaceAutocomplete.getPlace(this, data);
                p = place;

                gridView = (GridView) findViewById(R.id.grid_View);

                gridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout);
                getData();
                gridView.setAdapter(gridAdapter);

                gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                        ImageItem item = (ImageItem) parent.getItemAtPosition(position);
                        //Create intent
                        Intent intent = new Intent(PlaceActivity.this, VideoActivity.class);
                        intent.putExtra("bucket", item.getBucket());
                        intent.putExtra("dUrl", item.getdUrl());


                        //Start details activity
                        startActivity(intent);
                    }
                });


            } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
                Status status = PlaceAutocomplete.getStatus(this, data);
                // TODO: Handle the error.


            } else if (resultCode == RESULT_CANCELED) {
                // The user canceled the operation.
            }
        }
    }
var a = 1;

incrementAsync(function() {
  a = 2;
});

console.log(a);  // prints 1 because the function hasn't returned yet
var a = 1;

incrementAsync(function() {
  a = 2;
  console.log(a);  // prints 2 now
});
FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
FirebaseStorage mStorage = FirebaseStorage.getInstance();

mDatabase.getReference("...").addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
        ModelObject modelObject = storage.getValue(ModelObject.class);
        // Or just download the object here...
        mStorage.getReferenceFromUrl(modelObject.getUrl()).getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
            @Override
            public void onSuccess(StorageMetadata storageMetadata) {
                String title = storageMetadata.getCustomMetadata("title");
                gridAdapter.data.add(...);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Uh-oh, an error occurred!
            }
        });
    }
    ...
});