首页 > 解决方案 > Images don't load on devices when importing from firebase

问题描述

I'm trying to build project that users are able to sign up and upload images and descriptions to firebase and then see the images and texts in recyclerView using Firebase UI. Everything is working fine except one thing. when i upload an image to firebase, i see the description of that image but the image on other devices. can you help me to solve that bug?

enter image description here

TextView username;
ImageView profilePic;
EditText searchField;
RecyclerView recyclerView;
String userID;
ArrayList<modelClassDocs> list;


FirebaseAuth firebaseAuth;
FirebaseFirestore firebaseFirestore;
StorageReference storageReference;
DocumentReference documentReference, documentReference1, documentReference2;
DatabaseReference databaseReference;

FirebaseRecyclerOptions<modelClassDocs> options;
FirebaseRecyclerAdapter<modelClassDocs, ImageAdapter> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_u_i);

    username = findViewById(R.id.usernameTextView);
    profilePic = findViewById(R.id.profilePic);
    recyclerView = findViewById(R.id.inputSearch);
    searchField  = findViewById(R.id.searchField);

    SpacingItemInRecyclerView spacingItemInRecyclerView = new SpacingItemInRecyclerView(30);
    recyclerView.addItemDecoration(spacingItemInRecyclerView);
    recyclerView.setLayoutManager(new LinearLayoutManager(getBaseContext()));
    recyclerView.setHasFixedSize(true);

    list = new ArrayList<>();

    firebaseAuth = FirebaseAuth.getInstance();
    firebaseFirestore = FirebaseFirestore.getInstance();
    storageReference = FirebaseStorage.getInstance().getReference();

    FirebaseUser user = firebaseAuth.getCurrentUser();

    if (user != null){
        userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
    }

    databaseReference = FirebaseDatabase.getInstance().getReference().child("docsName");

    documentReference = firebaseFirestore.collection("users").document(userID);
    documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
        @Override
        public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
            assert value != null;
            username.setText(value.getString("username"));
        }
    });

    StorageReference fileRef = storageReference.child("users/" + firebaseAuth.getCurrentUser().getUid() + "/profile.jpg");
    fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
        @Override
        public void onSuccess(Uri uri) {
            Picasso.get().load(uri).into(profilePic);
        }
    });

    loadData("");

    searchField.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if (s.toString() != null){
                loadData(s.toString());
            }else {
                loadData("");
            }
        }
    });

}

public void loadData(String Data){
    documentReference2 = firebaseFirestore.collection("post").document();
    //Query searchQuery = databaseReference.orderByChild("docName").startAt(Data).endAt(Data + "\uf8ff");
    options = new FirebaseRecyclerOptions.Builder<modelClassDocs>().setQuery(documentReference2, modelClassDocs.class).build();
    adapter = new FirebaseRecyclerAdapter<modelClassDocs, ImageAdapter>(options) {
        @NonNull
        @Override
        public ImageAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_view, parent, false);
            return new ImageAdapter(view);
        }
        @Override
        protected void onBindViewHolder(@NonNull ImageAdapter holder, int position, @NonNull modelClassDocs model) {

            StorageReference fileRef = FirebaseStorage.getInstance().getReference().child("users/" + model.getUserID() + "/profile.jpg");
            fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Glide.with(getApplicationContext()).load(uri).into(holder.profilePic);
                }
            });
            holder.textView.setText(model.getDocName());
            holder.time.setText(model.getTime());
            Glide.with(getApplicationContext()).load(model.getImageUri()).centerCrop().into(holder.imageView);

            documentReference1 = firebaseFirestore.collection("users").document(model.getUserID());
            documentReference1.addSnapshotListener(MainUI.this, new EventListener<DocumentSnapshot>() {
                @Override
                public void onEvent(@Nullable DocumentSnapshot value, @Nullable FirebaseFirestoreException error) {
                    assert value != null;
                    holder.username.setText(value.getString("username"));
                }
            });
            holder.itemViewView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(MainUI.this, ViewSingleItem.class).putExtra("data", getRef(position).getKey()));
                }
            });
        }
    };
    recyclerView.setAdapter(adapter);
    adapter.startListening();
}


@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

public void EditProfile(View view) {
    Intent editProfileIntent = new Intent(MainUI.this, EditProfile.class);
    startActivity(editProfileIntent);
}

public void Post(View view) {
    startActivity(new Intent(MainUI.this, Post.class));
}

}

标签: androidfirebaseandroid-recyclerviewfirebase-storage

解决方案


尝试改变:

StorageReference fileRef = FirebaseStorage.getInstance().getReference()
                           .child("users/" + model.getUserID() + "/profile.jpg");

StorageReference fileRef = FirebaseStorage.getInstance().getReference()
                          .child("users").child(model.getUserID()).child("profile.jpg"));

推荐阅读