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