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