android - 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?
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));
}
}
解决方案
尝试改变:
StorageReference fileRef = FirebaseStorage.getInstance().getReference()
.child("users/" + model.getUserID() + "/profile.jpg");
至
StorageReference fileRef = FirebaseStorage.getInstance().getReference()
.child("users").child(model.getUserID()).child("profile.jpg"));
推荐阅读
- json - spring/jackson-databind 小升级后 HttpMessageConverter 不再工作
- wtforms - 'TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given'
- amazon-web-services - 一个或多个子网的路由表中可以有两个 NAT 网关吗?
- php - include custom code in wordpress for purge varnish
- python - calculation for every cell in row pandas
- c# - 为什么正则表达式组提取给出错误的答案?
- typescript - Is there a way to get the keys of an interface where interface[key] is a type?
- c++ - 多态性和在 C++ 中定义不同对象的列表
- regex - 如何创建通用正则表达式,以便可以在 scala spark 中提取所有组结果
- python - Using a blank line as an indicator value to end the input in while loop