getContext (). getResources () из класса, который не наследуется от Application - PullRequest
0 голосов
/ 31 октября 2019

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

Этот ответ на BitmapFactory.decodeResource и отрисовка * папок вопрос подсказывает мне использовать

Resources res = getContext().getResources();
int id = R.drawable.image; 
Bitmap b = BitmapFactory.decodeResource(res, id);

, который я перевел на

val res = getContext().getResources()
val errorbitmap:Bitmap = BitmapFactory.decodeResource( res,  R.drawable.pm5544)

, ноконечно, есть ошибка компиляции:

Неразрешенная ссылка: getContext

Что приводит нас к моему вопросу:

  • Вкл. какой объект мне нужно вызвать getContext()? или чтобы решить реальную проблему:
  • Есть ли другой API, который я должен был использовать для получения растрового изображения из моегоресурсы?

Ответы [ 2 ]

1 голос
/ 31 октября 2019

Для какого объекта мне нужно вызвать getContext ()?

Использовать Application Context. Вы можете использовать контекст приложения в любом месте вашего приложения.

Создайте свой собственный Application класс

public class AppApplication extends Application {

    private static AppApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static AppApplication getInstance() {
        return instance;
    }
}

И получите доступ к контексту приложения следующим образом:

Context appContext = AppApplication.getInstance().getApplicationContext();

Сейчасс appContext доступ к вашему ресурсу

Kotlin Версия:

class AppApplication :Application(){

    companion object{
        private lateinit var instance:AppApplication
        fun getInstance():AppApplication{
            return instance
        }
    }

    override fun onCreate() {
        super.onCreate()
        instance = this
    }
}

Доступ Application Контекст

val applicationContext = AppApplication.getInstance().applicationContext

Убедитесь, что вы добавили васПользовательский AppApplication класс в Manifest

<application
    android:name=".AppApplication"
    ............
</application>

Использование прикладного контекста безопасно, поскольку нет Activity или Fragment Проблемы жизненного цикла

1 голос
/ 31 октября 2019

Если вы запустите приведенный ниже код из MainActivity, у вас будет доступ к resources

val res = resources
val id = R.drawable.image
val b = BitmapFactory.decodeResource(res, id)

Чтобы использовать это в своем объекте, вы должны либо передать ресурсы в качестве параметра, либо если вынужно только передать одно изображение в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...