我正在尝试提取名为“imageUrl”的URL,以便从Firebase实时数据库中的URL检索图像,如下所示:
这是Firebase实时数据库中的DB结构:
我有这个DB:
{
"Image": {
"01": {
"id": "1",
"name": "img1",
"imageUrl": "https://www.pexels.com/photo/beach-calm-clouds-coast-457881/"
},
"02": {
"id": "2",
"name": "img2",
"imageUrl": "https://www.pexels.com/photo/sea-beach-holiday-vacation-42151/"
}
}
}
这是Android Studio中的一项活动:
public class BigToePose extends AppCompatActivity {
private Context context;
private ImageView img;
private FirebaseDatabase database;
private DatabaseReference mReference;
private DatabaseReference childReference;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bigtoepose);
context = this;
img = findViewById(R.id.imageView);
database = FirebaseDatabase.getInstance();
mReference = database.getReference();
childReference = mReference.child("Image").child("01");
}
@Override
protected void onStart() {
super.onStart();
childReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String url = dataSnapshot.child("imageUrl").getValue(String.class);
Picasso.with(context)
.load(url)
.into(img);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
我尝试将此代码作为从Android Studio中的其他活动移动的活动执行,但看起来活动未显示。我怎样才能让它发挥作用?
由于您尝试在执行的方法之外获取firebase引用,因此它可能根本不会被执行。尝试更改以下代码: -
public class BigToePose extends AppCompatActivity {
private Context context;
private TextView url;
private ImageView img;
private FirebaseDatabase database ;
private DatabaseReference mReference ;
private DatabaseReference childReference ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bigtoepose);
context = this;
img = findViewById(R.id.imageView);
// place here
database = FirebaseDatabase.getInstance();
mReference = database.getReference("Image");
childReference = mReference.child("01");
}
@Override
protected void onStart() {
super.onStart();
childReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String message = dataSnapshot.child("imageUrl").getValue(String.class);
Picasso.with(context)
.load(message)
.into(img);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}