Загрузчик не отображается при вызове веб-API Android - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть следующий загрузчик xml -

custom_progress_dialog.xml (layout)

<?xml version="1.0" encoding="utf-8" ?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/progres"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:background="#000000" >
  <ProgressBar
      android:indeterminate="true"
      style="?android:attr/progressBarStyleLarge"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_margin="20dp"
      android:layout_centerInParent="true"
      android:indeterminateDrawable="@drawable/custom_progress_bar" />
</RelativeLayout>

custom_progress_bar.xml (drawable)

<?xml version="1.0" encoding="utf-8" ?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%"
    android:pivotY="50%"
    android:fromDegrees="0"
    android:toDegrees="360">
  <shape android:shape="ring" android:innerRadiusRatio="3"
      android:thicknessRatio="8" android:useLevel="false">
    <size
        android:width="76dip"
        android:height="76dip" />
    <gradient
        android:type="sweep"
        android:useLevel="false"
        android:startColor="@android:color/transparent"
        android:endColor="#00FF00"
        android:angle="0" />
  </shape>
</rotate>

Затем есть метод ShowLoading -

public static Dialog ShowLoading(Context context)
{
    Dialog dialog = new Dialog(context, Android.Resource.Style.ThemeTranslucentNoTitleBar);
    dialog.SetContentView(Resource.Layout.custom_progress_dialog);
    dialog.Window.SetGravity(GravityFlags.Center);
    dialog.SetCancelable(true);
    dialog.CancelEvent += delegate { dialog.Dismiss(); };
    dialog.Show();
    return dialog;
}

Я пытаюсь показать индикатор выполнения при звонке на веб-API, например, -

public void testCall()
{

        var progressDialog = ShowLoading(_instance);

        string _apiUrl = "https://www.my-web-api-url.com";

        var request = (HttpWebRequest)WebRequest.Create(_apiUrl);
        request.Method = "GET";

        using (var response = _request.HttpWebResponse(request))
        {
            var objectResponse = _request.HttpWebResponseBody(response);
        }

        progressDialog.Dismiss();
}

Проблема, с которой я сталкиваюсь, заключается в том, что когда я вызываю веб-службу, она не показывает индикатор выполнения, и приложение по существу останавливается до завершения вызова веб-API.

Я даже удалилвызов веб-API из метода для проверки правильности отображения индикатора выполнения при вызове.

Как получить индикатор выполнения, отображающий , пока вызов API выполняется?

1 Ответ

1 голос
/ 25 апреля 2019

Не вызывайте API в основном потоке, используйте AsyncTask для вызова API

как

public class MyAsync extends AsyncTask<Void, Void, Void> {

    @Override
        protected void onPreExecute() {
            super.onPreExecute();
           //show progress dialog here
        }

        @Override
        protected Void doInBackground(Void... voids) {
            //call api here
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            //hide progress dialog here
        }
    }

чтобы выполнить это используйте это

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