Я создаю проект, аналогичный этому руководству androidhive Раньше он работал, но теперь изображение не показывает мне разрешенное хранилище, также я получаю такую ошибку

java.lang.ClassCastException: android.support.v7.widget.TintContextWrapper cannot be cast to android.app.Activity at com.example.admin.imageloading.ImageLoader$PhotosLoader.run(ImageLoader.java:143)

Строка № 143 ошибка

class PhotosLoader implements Runnable {
        PhotoToLoad photoToLoad;
        PhotosLoader(PhotoToLoad photoToLoad){
            this.photoToLoad=photoToLoad;
        }

        @Override
        public void run() {
            if(imageViewReused(photoToLoad))
                return;
            Bitmap bmp=getBitmap(photoToLoad.url);
            memoryCache.put(photoToLoad.url, bmp);
            if(imageViewReused(photoToLoad))
                return;
            BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
            try {
                Activity a = (Activity) photoToLoad.imageView.getContext();
                a.runOnUiThread(bd);
            }catch (Exception e){
                e.printStackTrace();
            }

        }
    }

Это мой код, пожалуйста, помогите мне

1
Ganesh P 28 Апр 2016 в 08:25

3 ответа

Лучший ответ

Если вы хотите установить изображение без использования сторонних библиотек , попробуйте это

try { 
    URL newurl = new URL(image_url); 
    Bitmap mIcon_val = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); 
    imageView.setImageBitmap(mIcon_val);
} catch (IOException e) { 
e.printStackTrace(); 
}

ИЛИ

Использовать библиотеку picasso

Добавить в свой файл Gradle

dependencies {

   compile "com.squareup.picasso:picasso:2.4.0"

}

Затем добавьте разрешение в Интернет в файл androidmanifest

<uses-permission android:name="android.permission.INTERNET" />

Затем добавьте этот код ниже в AndroidLoadImageFromURLActivity

  public class AndroidLoadImageFromURLActivity extends Activity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

            // Loader image - will be shown before loading image
            int loader = R.drawable.loader;

            // Imageview to show
            ImageView image = (ImageView) findViewById(R.id.image);

            // Image url
            String image_url = "http://api.androidhive.info/images/sample.jpg";

          //Loading image from below url into imageView

         Picasso.with(AndroidLoadImageFromURLActivity.this)
                .load(url)
                .into(image);

        }
    }
2
Arpit Patel 28 Апр 2016 в 06:24

Используйте Glide или Picasso для загрузки изображений с URL.

Для Glide добавьте

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

Затем:

 ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

 Glide.with(this).load("http://api.androidhive.info/images/sample.jpg").into(imageView);

Или смотрите документацию для деталей. https://github.com/bumptech/glide.

Для Пикассо добавьте зависимость

compile 'com.squareup.picasso:picasso:2.5.2'

После этого используйте этот код для загрузки изображения с URL:

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView); 

Если вы хотите увидеть подробности, следуйте этому: http://square.github.io/picasso/

0
Istiak Morsalin 28 Апр 2016 в 05:34

Ваша проблема в следующем:

Activity a = (Activity) photoToLoad.imageView.getContext();

Вы пытаетесь получить контекст действия из представления. Поскольку appcompat-v7:24.0.0 контекст из изображений не работает как раньше, так что теперь вы не можете этого сделать.

У вас есть два варианта: перейти на более раннюю версию или найти другой способ передать контекст вашему классу.

1
Hector 21 Июн 2016 в 11:25