J'ai essayé de mettre l'image de l'URL dans un ImageView dans un adaptateur personnalisé à l'aide de Glide. Mais cela me montre une image invisible. lorsque j'essaie de définir une image à partir d'un dossier pouvant être dessiné, cela fonctionne bien, mais lorsque j'utilise Glide, il disparaît. J'ai vu un autre exemple sur Internet (Udacity) et il a le même aspect, mais mon application n'affiche pas l'image. J'ai beaucoup cherché et je n'ai toujours pas trouvé de solution. Merci pour tous ceux qui aident
MainActivity.class:
public PostAdapter(Activity context, ArrayList<Post> posts){ super(context, 0, posts); } @NonNull @Override public View getView(int position, View convertView, ViewGroup parent) { View listItemView = convertView; if(listItemView == null){ listItemView = LayoutInflater.from(getContext()).inflate(R.layout.post_view, parent, false); } Post postItem = getItem(position); TextView text = (TextView) listItemView.findViewById(R.id.textBox); text.setText(postItem.getText()); TextView id = (TextView) listItemView.findViewById(R.id.userId); id.setText(postItem.getUserName()); ImageView imageView = (ImageView) listItemView.findViewById(R.id.imageView); if(postItem.getPhotoURL() != null){ Glide.with(imageView.getContext()).load(postItem.getPhotoURL()).into(imageView); }else{ imageView.setVisibility(View.GONE); } return listItemView; }
Post.classe:
public class Post { private String mText; private String mUserName; private String mPhotoURL; public Post(String text, String userName){ mText = text; mUserName = userName; } public Post(String text, String userName, String photoURL){ mText = text; mUserName = userName; mPhotoURL = photoURL; } public String getText() { return mText; } public String getUserName() { return mUserName; } public String getPhotoURL() { return mPhotoURL; } }
PostAdapter.class:
public class MainActivity extends AppCompatActivity { //Authentication private FirebaseAuth auth; private FirebaseAuth.AuthStateListener authStateListener; //Database private FirebaseFirestore db; String photo; String LOG_TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Authenticate(); showPosts(); ImageView imageView = findViewById(R.id.image); } private void Authenticate(){ //connect the app to Firebase auth = FirebaseAuth.getInstance(); db = FirebaseFirestore.getInstance(); //check if the user is log in authStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user == null) { // Choose authentication providers List<AuthUI.IdpConfig> providers = Arrays.asList( new AuthUI.IdpConfig.EmailBuilder().build(), new AuthUI.IdpConfig.GoogleBuilder().build()); // Create and launch sign-in intent startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).build(), 1); } } }; } public void showPosts(){ final ArrayList<Post> posts = new ArrayList<>(); final PostAdapter postAdapter = new PostAdapter(this, posts); ListView list = (ListView) findViewById(R.id.posts); list.setAdapter(postAdapter); CollectionReference ref = db.collection("posts"); //get post info ref.limit(25).get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() { @Override public void onComplete(@NonNull Task<QuerySnapshot> task) { for(QueryDocumentSnapshot doc : task.getResult()){ final String text = doc.getString("context"); String userId = doc.getString("userID"); photo = doc.getString("photo"); Log.e(LOG_TAG, photo); DocumentReference userRef = db.collection("users").document(userId); //get OP info userRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() { @Override public void onComplete(@NonNull Task<DocumentSnapshot> task) { String userFirstName = task.getResult().getString("firstName"); String userLastName = task.getResult().getString("lastName"); postAdapter.add(new Post(text, userFirstName + " " + userLastName, "url")); } }); } } }); } public void addPost(View v){ startActivity(new Intent(this, AddPostActivity.class)); finish(); } @Override protected void onPause() { super.onPause(); auth.removeAuthStateListener(authStateListener); } @Override protected void onResume() { super.onResume(); auth.addAuthStateListener(authStateListener); }
3 Réponses :
J'ai trouvé le problème. Je mets des valeurs fixes dans la largeur et la hauteur de l'ImageView
Essayez d'ajouter l'écouteur afin que nous puissions connaître l'exception Glide dans le rappel onLoadFailed.
Glide.with(imageView.getContext()) .load(postItem.getPhotoURL()) .listener(new RequestListener<Drawable>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { Log.e(TAG, "onLoadFailed: called ==" + e); return false; } @Override public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { Log.e(TAG, "onResourceReady: called"); return false; } }).into(imageView);
Changement:
Log.v("PhotoLog", "URL: "+ photo);
À:
postAdapter.add(new Post(text, userFirstName + " " + userLastName, photo));
Je vous recommande d'ajouter des journaux pour voir si l'URL est vide:
postAdapter.add(new Post(text, userFirstName + " " + userLastName, "url"));
Sortie de
postItem.getPhotoURL()
?Veuillez modifier votre question et ajouter la structure de votre base de données en tant que fichier JSON ou au moins une capture d'écran. Veuillez répondre avec @AlexMamo