Size: a a a

StartAndroid Ru Chat

2021 November 08

P

Polina in StartAndroid Ru Chat
не, так нельзя
источник

Д

Дания in StartAndroid Ru Chat
Не знаю на сколько кастыльно это будет выглядеть и можно ли, но можешь взять контекст от приложения
https://stackoverflow.com/questions/2002288/static-way-to-get-context-in-android
источник

А

Александр in StartAndroid Ru Chat
источник

P

Polina in StartAndroid Ru Chat
так у меня же тоже там есть приведение типов
источник

I

Ivan in StartAndroid Ru Chat
метод getSystemService надо на контексте вызвать
источник

I

Ivan in StartAndroid Ru Chat
контекст можно передать в метод
источник

P

Polina in StartAndroid Ru Chat
так?
источник

I

Ivan in StartAndroid Ru Chat
нет
источник

I

Ivan in StartAndroid Ru Chat
context.getSystemService(...)
источник

P

Polina in StartAndroid Ru Chat
о-о... Спасибо🙂
источник

V

VitalitySiletskiy in StartAndroid Ru Chat
Может кто то знает как найти путь к класу который исполняется типа String path = User.getClass. есть ли такой метод который покажет путь к исполняемому класу??
источник

В

Виктор in StartAndroid Ru Chat
А вы поняли почему тут надо писать контекст, а в активити нет?
источник

P

Polina in StartAndroid Ru Chat
потому что там нет контакста и я его передаю из активити/фрагмента, а если в активити/фрагменте вызываю, то беру метод ее контекста. Я так понимаю. Верно же?
источник

В

Виктор in StartAndroid Ru Chat
А вы попробуйте это во фрагменте вызвать без написания контекста перед getSystemService()
источник

P

Polina in StartAndroid Ru Chat
только в активити...  потому что system что ли?
источник

В

Виктор in StartAndroid Ru Chat
Неа) Дело в том, что getSystemService() - метод контекста(Context). Соответственно, этот метод всегда должен вызываться на экземпляре контекста. Это как если вы сделаете такой класс
class SomeClass() {
   fun someMethod() {}
}
то someMethod() где угодно вы не вызовите, нужно вызывать на экземпляре, т.е. SomeClass().someMethod()
С getSystemService() ситуация та же. Применительно к примеру выше - Context=SomeClass, getSystemService()=someMethod().
Теперь насчет активити. AppCompatActivity() наследуется от класса Context(вы можете убедиться в этом, провалившись в исходники по иерархии его наследования), тем самым наделяя его правом передачи в качестве экземпляра класса Context. Т.е. внутри активити this - это и контекст, и AppCompatActivity(), и все остальное, от чего он наследуется. В Java, если не ошибаюсь, вы всегда и везде должны писать явно this. В котлине this можно опускать. Т.е. в полном виде в активити вы вызываете this.getSystemService().
Насчет фрагмента. Fragment() не наследуется от Context, поэтому this не является контекстом. Во фрагменте вы можете использовать либо non-nullable метод requireContext(), либо nullable-свойство context. Например: requireContext().getSystemService().
Все остальные классы сами по себе не имеют контекста, вы должны его сами туда притащить откуда-нибудь(что вы и сделали, протащив его в конструкторе функции в виде параметра context. Поэтому тут вызываем имя_параметра_контекста.getSystemService()
источник

В

Виктор in StartAndroid Ru Chat
Ох, что-то я разошелся
источник

В

Виктор in StartAndroid Ru Chat
Если что-то из этой простыни непонятно, то спрашивайте :)
источник

P

Polina in StartAndroid Ru Chat
Я следила за твоим полетом мысли, Виктор:) Думаю, когда он допишет:) Ну а если серьезно. Спасибо большое за объяснение! Я почему-то думала, что фрагмент тоже от Context наследуется... А откуда тогда он берет context? из activity, в которой он находится, но по-идее он же от нее не наследуется? Вообще на самом деле не особо понятно, что такое в принципе context, какое-то абстрактное понятие, я его понимала, типа, как все что находится в активити или во фрагменте и является ее контекстом, а получается, что во фрагменте его и нет напрямую. А первая часть, да понятно, что у класса Context один из методов getSystemService.

теперь у меня простыня получилась) ох, дернул меня черт пойти в IT😂 Как вы тут много всего все знаете, тоже так хочу)
источник

SP

Sergey Panov in StartAndroid Ru Chat
"А откуда тогда он берет context?"
Фрагмент держит ссылку на активити, которая есть контекст.
"не особо понятно, что такое в принципе context, какое-то абстрактное понятие"
вот хорошее объяснение того что такое контекст
https://www.youtube.com/watch?v=Qo3fPCf_nVk
"ох, дернул меня черт пойти в IT"
ещё не поздно остановиться.
источник