Ich habe ein paar Probleme mit einer Android-Liste. Ich habe eine Methode, die eine Liste von Spielern erstellt und die Spieler aus der Datenbank und dem Speicher der Firebase lädt.Android Firebase Speicher, Innerclass Download auf Bitmap
Einige Spieler haben Profilbilder und sie werden als generierter Schlüssel in storage/players/keyname
gespeichert (der eindeutige Schlüssel eines Spielers in der Datenbank ist der Profilbildname im Firebase-Speicher).
Das Problem, das ich habe, ist, wenn ich versuche, den OnSuccessListener/Player zu erstellen. Ich kann die Daten einfach nicht weitergeben.
Probleme mit der onSuccessListener:
- außerhalb Alles ist ein „outerclass“ betrachtet, was bedeutet, wenn ich einen Spieler erstellen möchten sie nicht die Daten innerhalb des onsuccesslistener lesen kann.
- alles Innere kann keine Daten außerhalb des Zuhörers weitergeben.
- Ich kann es nicht konvertieren in Bitmap
Ich muss in der Lage sein zu schaffen „Spieler p“ mit Daten aus dem Hörer und der Map-Eintrag. Bis jetzt bin ich gescheitert (kann beide nicht passieren).
//Method to create the list of players. To do: call again after adding new player
public void createPlayerList(){
//The list of players that will be filled
final List listPlayers = new ArrayList<Player>();
//The path where all our players are stored.
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).child("team").child("players");
//Method that just gets called once
ref.addListenerForSingleValueEvent(new ValueEventListener() {
//dataSnapshot contains all data from the path to our players
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Map<String, Object> players = (Map<String, Object>) dataSnapshot.getValue();
//We return our player data in a map. Loop through each value in the map and create a player object for each player
//And add that player object to our list of players
//Create Storage instance
FirebaseStorage storage = FirebaseStorage.getInstance();
//Create storageReference
final StorageReference storageRef = storage.getReferenceFromUrl("gs://bucket.appspot.com");
// Create a reference to a file from a Google Cloud Storage URI
StorageReference gsReference = storage.getReferenceFromUrl(storageRef + "/players/");
for (Map.Entry<String, Object> entry : players.entrySet()){
Map singlePlayer = (Map) entry.getValue();
//Get unique key
String key = entry.getKey();
storageRef.child(key).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
//Picasso.with(getActivity()).load(uri).into(R.id.playerProfilePicture);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
//standard mage
Bitmap profileBits = BitmapFactory.decodeResource(getResources(), R.drawable.player_icon);
PlayersFragment.this.setProfilePicture(profileBits);
//Create player
Player p = new Player((String) singlePlayer.get("name"), (String) singlePlayer.get("preferredPosition"), profilePicture );
//Add player to list
listPlayers.add(p);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
//Add all results from database to our listview
listViewPlayers = (ListView) fragmentView.findViewById(R.id.players_list);
//Attach adapter to listview, to get a layout for each row
listViewPlayers.setAdapter(new PlayerAdapter(getActivity(), R.layout.row_player_list_item, listPlayers));
//Necessary for handling clicks
listViewPlayers.setItemsCanFocus(true);
}
Sie haben Recht. Ich habe es geändert. – user1692823