Как я могу получить данные в реальном времени из API, используя Retrofit android - PullRequest
1 голос
/ 12 февраля 2020

Привет, ребята. Я пытаюсь получить данные в реальном времени, когда меняются данные в API автоматизации. c См. sh. Мой макет и обновленные данные показывают это. Как я могу это сделать?

Вот мой код: -

Я использую следующие зависимости: -

 // retrofit, gson
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'

Здесь мой метод интерфейса API: -

@GET("get_doctor_expense_categories.php")
Call<GetExpenseCategoriesListResponse> get_doctor_expense_categories(@Query("doctor_id") String doctor_id);

И это мой ApiClient: -

public class ApiClient {

private static final String ROOT_URL = "YOUR URL";

public static ApiInterface getApiService() {
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();

    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(1, TimeUnit.MINUTES)
            .readTimeout(30, TimeUnit.SECONDS)
            .writeTimeout(15, TimeUnit.SECONDS)
            .build();

    Gson gson = new GsonBuilder().setLenient().create();
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ROOT_URL)
            .client(client)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    return retrofit.create(ApiInterface.class);
}

}

И Это мой метод вызова API, где я получаю данные в список: -

private void getCategories(String doctor_id) {
    progressDialog = CustomProgressBar.createProgressDialog(ViewCategoriesActivity.this);
    final ApiInterface api = ApiClient.getApiService();
    Call<GetExpenseCategoriesListResponse> call = api.get_doctor_expense_categories(doctor_id);

    call.enqueue(new Callback<GetExpenseCategoriesListResponse>() {
        @SuppressLint("SetTextI18n")
        @Override
        public void onResponse(@NonNull Call<GetExpenseCategoriesListResponse> call, @NonNull Response<GetExpenseCategoriesListResponse> response) {
            if (response.code() == 200) {
                progressDialog.dismiss();
                if (response.body() != null) {
                    if (response.body().getStatus().equalsIgnoreCase("success")) {

                        expanseCatList = response.body().getData();

                        if (expanseCatList.isEmpty()) {
                            txt_no_data_found.setVisibility(View.VISIBLE);
                            recyclerView.setVisibility(View.GONE);
                        } else {

                            txt_no_data_found.setVisibility(View.GONE);
                            recyclerView.setVisibility(View.VISIBLE);

                            expanseCatListAdapter = new CategoriesListAdapter(expanseCatList, ViewCategoriesActivity.this, ViewCategoriesActivity.this::catClick);
                            RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(ViewCategoriesActivity.this, LinearLayoutManager.VERTICAL, false);
                            recyclerView.setLayoutManager(mLayoutManager);
                            recyclerView.setItemAnimator(new DefaultItemAnimator());
                            recyclerView.setAdapter(expanseCatListAdapter);

                        }


                    } else {

                        Toast.makeText(ViewCategoriesActivity.this, "" + response.body().getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
            } else if (response.code() == 400) {
                progressDialog.dismiss();

                Toast.makeText(ViewCategoriesActivity.this, "Bad Request", Toast.LENGTH_SHORT).show();

            } else if (response.code() == 401) {
                progressDialog.dismiss();
                Toast.makeText(ViewCategoriesActivity.this, "Unauthorized User", Toast.LENGTH_SHORT).show();

            } else if (response.code() == 404) {
                progressDialog.dismiss();
                Toast.makeText(ViewCategoriesActivity.this, "Not Found", Toast.LENGTH_SHORT).show();

            } else if (response.code() == 500) {
                progressDialog.dismiss();
                Toast.makeText(ViewCategoriesActivity.this, "Internal Server Error", Toast.LENGTH_SHORT).show();
            } else {
                progressDialog.dismiss();
                Toast.makeText(ViewCategoriesActivity.this, "Unknown Error", Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onFailure(Call<GetExpenseCategoriesListResponse> call, Throwable t) {
            progressDialog.dismiss();
            Toast.makeText(ViewCategoriesActivity.this, "onFailer:  " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

}

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Это мои настройки.

public interface ApiInterface {
@GET("place/autocomplete/json?")
Call<ResponseBody> doPlaces(@QueryMap Map<String, String> options);}

public class RetrofitClient {
public static final String BASE_URL = Environment.getBaseUrl();
public static ApiInterface service (Context context) {
  HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
  logging.setLevel(HttpLoggingInterceptor.Level.BODY);

  OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
          .connectTimeout(3, TimeUnit.MINUTES)
          .readTimeout(3, TimeUnit.MINUTES)
          .writeTimeout(3, TimeUnit.MINUTES)
          .addInterceptor(logging)
          .addInterceptor(new NetworkConnection(context))
          .addInterceptor(new ResponseStatus(context))
          .build();

  ApiInterface service = new Retrofit.Builder()
          .baseUrl(BASE_URL).client(okHttpClient)
          .build().create(UrlServices.class);
  return service;
}

public static void getContentData(final Dialog dialog, final Call<ResponseBody> method, final WebResponse webResponse) {
  if (dialog != null)
     AppProgressDialog.show(dialog);
  method.enqueue(new Callback<ResponseBody>() {
     @Override
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
        if (dialog != null)
           AppProgressDialog.hide(dialog);
        JsonUtil.handleResponse(response, webResponse);
     }

     @Override
     public void onFailure(Call<ResponseBody> call, Throwable throwable) {
        if (dialog != null)
           AppProgressDialog.hide(dialog);
        webResponse.onResponseFailed(throwable.getMessage());
     }
  });
}

}

public interface WebResponse {
void onResponseSuccess(Response<ResponseBody> result);
void onResponseFailed(String error);
}

Использование в Activity / Fragment

RetrofitClient.getContentData(new Dialog(context), RetrofitClient.service(context).doPlaces(hashMap), new WebResponse() {
        @Override
        public void onResponseSuccess(Response<ResponseBody> result) {

        }

        @Override
        public void onResponseFailed(String error) {

        }
    });
0 голосов
/ 12 февраля 2020

Это невозможно, используя модификацию, если вам нужны данные в реальном времени, вы можете использовать суп / сокет

...