我如何使用翻新android从API获取实时数据

问题描述 投票:0回答:1

您好,我正在尝试实时获取数据,当API中的更改数据自动引用我的布局并显示更新的数据时。我该怎么办?

这是我的代码:-

我使用此依赖项:-

 // 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();
        }
    });

}
android android-recyclerview retrofit real-time
1个回答
0
投票

如果需要实时数据可以使用汤/汤筒,则无法通过翻新来实现

© www.soinside.com 2019 - 2024. All rights reserved.