0
votes

Android Java - Glide ne fonctionne pas dans l'adaptateur personnalisé

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);
    }


2 commentaires

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


3 Réponses :


0
votes

J'ai trouvé le problème. Je mets des valeurs fixes dans la largeur et la hauteur de l'ImageView


0 commentaires

1
votes

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);


0 commentaires

1
votes

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"));


0 commentaires