Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.12.2021
Сообщений: 3

Элементы не отображаются на экране во время запроса API

14.09.2023, 18:36. Показов 416. Ответов 0

Студворк — интернет-сервис помощи студентам
Я создаю приложение, которое должно показывать GIF-файлы из Giphy API на первом экране, и после нажатия на определенный GIF-файл должен открываться второй фрагмент и показывать GIF-файл в полном размере. Но после запуска приложения я вижу просто пустой экран (start_activity.xml), и ни один из GIF-файлов не представлен. Ссылки, такие как ключ API, base URL и т. д., правильные.
Возможно, дело в реализации кода во фрагменте или ViewModel.
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class StartFragment : Fragment() {
 
    private lateinit var binding: FragmentStartBinding
    private lateinit var recyclerView: RecyclerView
    private lateinit var adapter: StartAdapter
    private lateinit var viewModel: StartViewModel
 
    @SuppressLint("NotifyDataSetChanged")
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentStartBinding.inflate(inflater, container, false)
 
        viewModel = ViewModelProvider(this)[StartViewModel::class.java]
        recyclerView = binding.rvStart
        val gifs = mutableListOf<DataObject>()
        adapter = StartAdapter(gifs)
        recyclerView.adapter = adapter
        recyclerView.layoutManager = GridLayoutManager(context, 2)
 
        viewModel.myGifList.observe(viewLifecycleOwner) { gifList ->
            gifs.clear()
            gifs.addAll(gifList)
            adapter.notifyDataSetChanged()
        }
 
        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.getGif()
        }
 
        adapter.setOnItemClickListener(object : StartAdapter.OnItemClickListener {
            override fun onItemClick(position: Int) {
                val selectedGifUrl = gifs[position].image.origImage.url
                val bundle = Bundle()
                bundle.putString("selectedGifUrl", selectedGifUrl)
 
                Navigation.findNavController(binding.root)
                    .navigate(R.id.action_startFragment_to_detailFragment, bundle)
            }
        })
 
        return binding.root
    }
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
class StartAdapter(private val gifs: List<DataObject>) : RecyclerView.Adapter<StartAdapter.StartViewHolder>() {
 
    private lateinit var mListener: OnItemClickListener
 
    interface OnItemClickListener {
        fun onItemClick(position: Int)
    }
 
    fun setOnItemClickListener(listener: OnItemClickListener) {
        mListener = listener
    }
 
    class StartViewHolder(val binding: ItemGifLayoutBinding, listener: OnItemClickListener) :
        RecyclerView.ViewHolder(binding.root) {
        init {
            itemView.setOnClickListener {
                listener.onItemClick(adapterPosition)
            }
        }
    }
 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): StartViewHolder {
        val binding =
            ItemGifLayoutBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return StartViewHolder(binding, mListener)
    }
 
    override fun getItemCount(): Int {
        return gifs.size
    }
 
    override fun onBindViewHolder(holder: StartViewHolder, position: Int) {
        val data = gifs[position]
        Glide.with(holder.itemView.context)
            .load(data.image.origImage.url)
            .listener(object : RequestListener<Drawable> {
                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Drawable>?,
                    isFirstResource: Boolean
                ): Boolean {
 
                    return false
                }
 
                override fun onResourceReady(
                    resource: Drawable?,
                    model: Any?,
                    target: Target<Drawable>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean
                ): Boolean {
 
                    return false
                }
            })
            .into(holder.binding.ivGif)
    }
}
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class StartViewModel: ViewModel() {
 
    private val repository = Repository()
    private val _myGifList = MutableLiveData<List<DataObject>>()
    val myGifList: LiveData<List<DataObject>> get() = _myGifList
 
    fun getGif() {
        try {
            val response = repository.getGifs().execute()
            if (response.isSuccessful) {
                _myGifList.postValue(response.body()?.res ?: emptyList())
            } else {
 
            }
        } catch (e: Exception) {
 
        }
    }
}
Kotlin
1
2
3
4
5
interface ApiService {
 
    @GET("v1/gifs/trending?api_key=*here is my API key located*")
    fun getGif(): retrofit2.Call<DataResult>
}
Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
object RetrofitInstance {
 
    private val retrofit by lazy {
        Retrofit.Builder().
            baseUrl("https://api.giphy.com/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
 
    val api: ApiService by lazy {
        retrofit.create(ApiService::class.java)
    }
}
Kotlin
1
2
3
4
5
6
class Repository {
 
    fun getGifs(): retrofit2.Call<DataResult> {
        return RetrofitInstance.api.getGif()
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.09.2023, 18:36
Ответы с готовыми решениями:

Элементы списка (спрайты) неверно отображаются на экране
Я хотел написать программу, используя библиотеку SFML, в которой необходимо использовать список объектов класса, через которые можно...

Помехи на экране во время появления бренда материнки на экране (самое начало включения компьютера)
Включаю компьютер, в самом начале, когда появляется лого &quot;ASUS&quot;, наблюдаются помехи пару секунд, как на испорченной кассете VHS, далее...

На экране не отображаются ярлыки
У меня на рабочем столе не отображаются ярлыки. Когда выбираешь вид - маленькие значки вместо ярлыков черные квадратики. При выборе вид -...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2023, 18:36
Помогаю со студенческими работами здесь

Управление в диалоговом режиме графическими объектами, которые отображаются на экране
1. Завершение работы с объектом: Исчезает. 2. Движение объекта в автоматическом режиме: По запомненных траектории. 3. Изменение цвета и...

Не отображаются результаты запроса
Код должен формировать табличку, заполненную данными из базы, в соответствии с выбранным пользователем объектом, но совсем ничего не...

Алгоритм, использующий Z-буфер: на экране отображаются невидимые линии каркаса объекта
Задание состоит в том, чтобы на экран не отображались невидимые линии каркаса объекта. При выполнении задания использовать алгоритм...

Некоторые записи не отображаются из запроса
Добавляю записи , коды стоят четко, а отображаются не все записи в полях, а у некоторых все хорошо. Понять не могу в чем дело. Фото и Sql...

Не отображаются данные запроса передаваемые из фронтенда
Здравствуйте, есть группа чекбоксов. При нажатии на нее в PHP передаются названия чекбоксов в виде города. В PHP вроде все передается но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru