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

Проблема с возвращением значения

30.05.2021, 11:15. Показов 501. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Столкнулся со следующей проблемой:
Есть активити и есть класс, который осуществляет запрос по сети и возвращает результат. В активити есть объект этого класса, через этот объект активити обращается к классу и должна вернуться определенная информация. Вот куски кода по теме:
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
class MainActivity : AppCompatActivity() {
    private lateinit var dataProcessing : DataProcessing
 override fun onCreate(savedInstanceState: Bundle?) {
 dataProcessing = DataProcessing()
private fun showData(){
// другой код
dataList = dataProcessing.sendRequest(townName) // возвращает налл
val wheather = dataList.get("nameTown")
     Log.d("Egor","two $wheather")
         val tem = dataList.get("temperature")
     Log.d("Egor","three $tem")
         dataShow(wheather, tem)
 
class DataProcessing {
    private val retrofitImpl: RetrofitImpl = RetrofitImpl()
    private  val mainActivity : MainActivity = MainActivity()
    lateinit var listString : MutableMap<String, String>
    var map: Map<String,String> = mapOf()
    internal fun getInfoToMainActivity(townName:String): Map<String, String>{
       sendRequest(townName)
        return listString
    }
    internal fun sendRequest(townName:String) : Map<String,String>{
 
        retrofitImpl.getRequest().showWeather(townName).enqueue(object : Callback<DateWeather> {
            var objectMainActivity = mainActivity ?: MainActivity()
            var listString= mutableMapOf<String, String>()
 
            override fun onResponse(call: retrofit2.Call<DateWeather>, response: Response<DateWeather>) {
                val dateWeather:DateWeather? = response.body()
                if (response.isSuccessful && dateWeather != null) {
                    val nameTown = dateWeather.weather.get(0).toString()
                    Log.d("Egor","nametown" + nameTown)
                    val size = nameTown.length - 1
                    listString.apply {
                        put("nameTown", nameTown.subSequence(13, size).toString())
                        put("temperature", dateWeather.main.temp!!.toInt().toString())
                        Log.d("Egor","one ${listString.get("nameTown")}")
                    }
                    map = listString.toMap()
                } else
                    Toast.makeText(MainActivity(), "Произошла ошибка \n Возможно вы неправильно ввели название населенного пункта", Toast.LENGTH_LONG).show()
            }
            override fun onFailure(call: Call<DateWeather>, t: Throwable) {
                Toast.makeText(MainActivity(), "Произошла ошибка сети", Toast.LENGTH_LONG).show()
            }
        })
        Log.d("Egor","шаг перед возратом мэп $map")
        return map;
    }
    }
По времени логи показали следующее:
Code
1
2
3
4
5
2021-05-30 02:59:31.208 19871-19871/com.example.wheatherprog D/Egor: шаг перед возратом мэп {}
2021-05-30 02:59:31.208 19871-19871/com.example.wheatherprog D/Egor: two null
2021-05-30 02:59:31.208 19871-19871/com.example.wheatherprog D/Egor: three null
2021-05-30 02:59:31.355 19871-19871/com.example.wheatherprog D/Egor: nametownWeather(main=Clear)
2021-05-30 02:59:31.355 19871-19871/com.example.wheatherprog D/Egor: one Clear
Почему выполнение кода возвращается в активити, бросая выполнение кода в DataProcessing? В Mup данные записываются уже после того как программа передала Map в активити. По итогу у меня нет данных, программа пустая.
Раньше это все было в одном классе с активити и все было супер, но я решил развести функционал по разным классом и получился полный провал. Подскажите пожалуйста в чем моя ошибка и как ее исправить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2021, 11:15
Ответы с готовыми решениями:

Какая разница между возвращением значения и присваивания значения?
Какая разница между возвращением значения и присваивания значения? Я всегда думал, что возвращение это одно и тоже что и присваивание, но...

Проблема с возвращением типа float
Помогите пожалуйста разобраться ........... ftoot GetMPUTemp() { ftoot temp; temp = GetDataMPU(TEMP_OUT_H,TEMP_OUT_L); temp =...

Цикл с возвращением значения
Помогите понять как возвращать string значения. На выходе должнабыть таже строка, но у меня ошибка с concat(o,i,o) хотя должно быть...

3
8 / 17 / 9
Регистрация: 18.04.2019
Сообщений: 125
30.05.2021, 12:09
egor07, Скорее всего проблема в том, что retrofit работает асинхронно. Если посмотрим в логи, то увидим, что Log-и, которые Вы вызываете в onResponse, срабатывают позже, чем
Java
1
Log.d("Egor","шаг перед возратом мэп $map")
.
0
0 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 15
30.05.2021, 12:16  [ТС]
Мне кажется так и есть, но как посоветуете решить проблему? Потому что раньше этот метод был в активити и все было замечательно. Но я хочу логику приложения разбить на отдельные классы и вот, что получилось)
0
8 / 17 / 9
Регистрация: 18.04.2019
Сообщений: 125
30.05.2021, 13:40
egor07, я не профи в этом, но думаю можно вывести данные в if(isSuccess...), а в основном классе просто вызвать DataProcessing().sendRequest() функцию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2021, 13:40
Помогаю со студенческими работами здесь

Возвращением значения из функции
написал такую программу: #include &lt;stdio.h&gt; #include &lt;math.h&gt; f(double x) { return sqrt(x - 1); }

Непонятки с возвращением значения
Моя программа переводит из одной системы счисления в другую, но суть в том, что моя функция In_The_Val_Sys, не возвращает нужное...

java + jni. считывание значений из java кода и работа с ним в c++ с дальнейшим возвращением значения в java
Работаю в eclipse с android sdk/ndk. как импортировать в java файл c++ уже разобрался, не могу понять как можно считать значений из java...

Не могу понять как найти силу тока при известных E и R. все значения не равны 0 .значения не проблема

Поиск с возвращением.
Доброго времени суток, ув. форумчане! В общем, пришёл я с проблемой следующего характера: не получается реализовать алгоритм поиска с...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 25.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 23.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru