Остановить индикатор выполнения после получения ответа от сервера - PullRequest
0 голосов
/ 03 апреля 2019

Мне нужно остановить индикатор выполнения после получения ответа от сервера.Я пытался использовать следующий код XML-код

  <ProgressBar
        android:layout_weight="1"
        android:id="@+id/progressBar"
        android:indeterminate="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="40dp"
        android:minWidth="40dp"
        tools:ignore="MissingConstraints" />

код Котлина

 var progressBar =  findViewById(R.id.progressBar) as ProgressBar
 doAsync {
            try {
                    progressBar.setVisibility(View.VISIBLE);
                    appList = getAppList(requestBody, LAUNCHER_BASE_URL)
                    Log.d("App list =", appList.toString())
                    appInfoList = populateList()
                    progressBar.setVisibility(View.GONE);
            } catch (e: Exception) {
                progressBar.setVisibility(View.GONE);
                Log.e("Exception-launcher", e.toString())
            }

При использовании этого кода индикатор выполнения неостановка даже после получения ответа.Пожалуйста, помогите мне

Я пробовал это, но страница становится пустой после остановки индикатора выполнения

Ответы [ 4 ]

3 голосов
/ 03 апреля 2019

Добавьте progressBar.setVisibility(View.INVISIBLE); и в ваше предложение try, поскольку в его текущем состоянии загрузка будет удаляться только при сбое API:

 var progressBar =  findViewById(R.id.progressBar) as ProgressBar
 doAsync {
            try {
                    progressBar.setVisibility(View.VISIBLE);
                    appList = getAppList(requestBody, LAUNCHER_BASE_URL)
                    Log.d("App list =", appList.toString())
                    appInfoList = populateList()
                progressBar.setVisibility(View.INVISIBLE);
            } catch (e: Exception) {
                progressBar.setVisibility(View.INVISIBLE);
                Log.e("Exception-launcher", e.toString())
            }
1 голос
/ 03 апреля 2019

попробуйте ниже код

doAsync {
    try {
        progressBar.visibility = View.VISIBLE
        appList = getAppList(requestBody, LAUNCHER_BASE_URL)
        Log.d("App list =", appList.toString())
        appInfoList = populateList()
    } catch (e: Exception) {
        progressBar.visibility = View.GONE
        Log.e("Exception-launcher", e.toString())
    } finally {
        progressBar.visibility = View.GONE
    }
0 голосов
/ 03 апреля 2019

Не совсем понятно, как вы можете справиться с View внутри doAsync Обычно это должно выглядеть следующим образом

 val progressBar =  findViewById<ProgressBar>(R.id.progressBar)
 progressBar.visibility = View.VISIBLE
 doAsync {
      try {
         appList = getAppList(requestBody, LAUNCHER_BASE_URL)
         Log.d("App list =", appList.toString())
         appInfoList = populateList()              
      } catch (e: Exception) {
          e.printStackTrace()
      }

      uiThread {
         progressBar.visibility = View.GONE
      }
 }
0 голосов
/ 03 апреля 2019

Вы скрываете индикатор выполнения, только если код входит в Exception (блок catch).

Переместите свой код после блока catch следующим образом:

    try {
         progressBar.setVisibility(View.VISIBLE);
         appList = getAppList(requestBody, LAUNCHER_BASE_URL)
         Log.d("App list =", appList.toString())
         appInfoList = populateList()
    } catch (e: Exception) {
         Log.e("Exception-launcher", e.toString())
    }
    progressBar.setVisibility(View.GONE);

Позвольте мнезнаю, поможет ли это

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