Android Приложение загрузки изображений Picasso c sh при прокрутке RecyclerView - PullRequest
1 голос
/ 21 марта 2020

Я использую Retrofit для тестирования и изучения, так как у меня есть проект. В то время как я использую https://jsonplaceholder.typicode.com/photos для привязки фотографии в режиме рециркуляции. Проблема в том, что я не могу прокрутить выше 9 изображений; Я имею в виду всякий раз, когда я прокручиваю вниз до 10-го изображения, оно показывается, а затем приложение вылетает. img

2020-03-21 15:11:48.286 9426-9426/navneet.com.carsrecyclerview E/AndroidRuntime: FATAL EXCEPTION: main
Process: navneet.com.carsrecyclerview, PID: 9426
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
    at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:714)
    at com.pkmmte.view.CircularImageView.refreshBitmapShader(CircularImageView.java:341)
    at com.pkmmte.view.CircularImageView.invalidate(CircularImageView.java:262)
    at android.widget.ImageView.setImageDrawable(ImageView.java:572)
    at com.squareup.picasso.PicassoDrawable.setPlaceholder(PicassoDrawable.java:59)
    at com.squareup.picasso.RequestCreator.into(RequestCreator.java:728)
    at navneet.com.carsrecyclerview.CarsAdapter.onBindViewHolder(CarsAdapter.java:58)
    at navneet.com.carsrecyclerview.CarsAdapter.onBindViewHolder(CarsAdapter.java:24)
    at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
    at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
    at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
    at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
    at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:286)
    at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:343)
    at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:359)
    at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:366)
    at android.support.v7.widget.GapWorker.run(GapWorker.java:397)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

проблема похожа на Android Приложение загрузки изображений Picasso cra sh при прокрутке RecyclerView , но моя точка зрения выглядит иначе.

Picasso.get().load(carsModels.get(i).getUrl()).noFade().resize(150,150).into(viewHolder.car_image, new Callback() {
      @Override
      public void onSuccess() {

      }

      @Override
      public void onError(Exception e) {
          Toast.makeText(context, "An error occurred", Toast.LENGTH_SHORT).show();
      }
  });

любая помощь будет оценена. спасибо.

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Мне кажется, что проблема не в Пикассо. Это может быть с третьей стороной CircularImageView, которую вы используете. Вы можете установить точку останова отладки на android.graphics.Bitmap.createScaledBitmap(Bitmap.java:714) и посмотреть, почему объект Bitmap равен нулю. Затем вы можете go отследить трассировку стека и выяснить, почему она пуста. Это даст вам более четкое представление о том, что вам нужно сделать, чтобы убедиться, что ваш объект Bitmap был создан до того, как он попадет в этот фрагмент кода.

Если вы что-то найдете, пожалуйста, обновите здесь, чтобы я мог редактировать этот ответ после лучшего понимания причины вашего исключения NullPointerException.

1 голос
/ 21 марта 2020

Я думаю, что лучше, если вы просто загрузите изображение, но изменение размера происходит на конце ImageView

Picasso.get().load(carsModels.get(i).getUrl()).noFade().into(viewHolder.car_image);

В вашем случае, car_image ImageView в макете XML должно иметь:

android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"

Это гарантирует, что изображение, которое вы загружаете внутри, имеет размер 150x150 пикселей и гарантирует, что оно не растягивается и не выглядит дезориентированным. Он начнет выравниваться по центру, если у вас есть изображения, которые не имеют равного соотношения сторон.

Надеюсь, это поможет!

...