如何使用改型android从API获取实时数据

如何使用改型android从API获取实时数据,android,android-recyclerview,retrofit,real-time,Android,Android Recyclerview,Retrofit,Real Time,大家好,当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中的更改数据自动引用我的布局和更新的数据时,我正在尝试实时获取数据。我该怎么做

这是我的密码:-

我使用此依赖项:-

 // 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'
@GET("get_doctor_expense_categories.php")
Call<GetExpenseCategoriesListResponse> get_doctor_expense_categories(@Query("doctor_id") String doctor_id);
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);
}
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();
        }
    });

}
这是我的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'
@GET("get_doctor_expense_categories.php")
Call<GetExpenseCategoriesListResponse> get_doctor_expense_categories(@Query("doctor_id") String doctor_id);
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);
}
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();
        }
    });

}
}

这是我的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'
@GET("get_doctor_expense_categories.php")
Call<GetExpenseCategoriesListResponse> get_doctor_expense_categories(@Query("doctor_id") String doctor_id);
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);
}
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();
        }
    });

}
private void getCategories(字符串医生id){
progressDialog=CustomProgressBar.createProgressDialog(ViewCategoriesActivity.this);
最终ApiInterface api=ApiClient.getApiService();
Call Call=api.获取医生费用类别(医生id);
call.enqueue(新回调(){
@SuppressLint(“SetTextI18n”)
@凌驾
public void onResponse(@NonNull调用,@NonNull响应){
if(response.code()==200){
progressDialog.disclose();
if(response.body()!=null){
if(response.body().getStatus().equalsIgnoreCase(“成功”)){
expanseCatList=response.body().getData();
if(expanseCatList.isEmpty()){
txt\u找不到数据\u.setVisibility(View.VISIBLE);
recyclerView.setVisibility(View.GONE);
}否则{
txt\u找不到数据\u.setVisibility(View.GONE);
recyclerView.setVisibility(View.VISIBLE);
expanseCatListAdapter=新类别ListAdapter(expanseCatList,ViewCategoriesActivity.this,ViewCategoriesActivity.this::catClick);
RecyclerView.LayoutManager mLayoutManager=新建LinearLayoutManager(ViewCategoriesActivity.this,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(mLayoutManager);
setItemAnimator(新的DefaultItemAnimator());
setAdapter(expanseCatListAdapter);
}
}否则{
Toast.makeText(ViewCategoriesActivity.this,“+response.body().getMessage(),Toast.LENGTH_SHORT.show();
}
}
}else if(response.code()==400){
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“错误请求”,Toast.LENGTH_SHORT.show();
}else if(response.code()==401){
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“未经授权的用户”,Toast.LENGTH_SHORT.show();
}else if(response.code()==404){
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“未找到”,Toast.LENGTH_SHORT.show();
}else if(response.code()==500){
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“内部服务器错误”,Toast.LENGTH_SHORT.show();
}否则{
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“未知错误”,Toast.LENGTH_SHORT.show();
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
progressDialog.disclose();
Toast.makeText(ViewCategoriesActivity.this,“onFailer:+t.getMessage(),Toast.LENGTH_SHORT).show();
}
});
}

如果您需要实时数据,则无法使用改装。您可以使用soup/socket

如果您需要实时数据,则无法使用改装。您可以使用soup/socket

这是我的改装设置

公共接口{
@获取(“place/autocomplete/json?”)
调用doPlaces(@QueryMap-options);}
公共类客户端{
公共静态最终字符串BASE_URL=Environment.getBaseUrl();
公共静态接口服务(上下文){
HttpLoggingInterceptor logging=新的HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient OkHttpClient=新建OkHttpClient().newBuilder()
.connectTimeout(3,时间单位为分钟)
.readTimeout(3,时间单位为分钟)
.writeTimeout(3,时间单位:分钟)
.addInterceptor(日志记录)
.addInterceptor(新网络连接(上下文))
.addInterceptor(新响应状态(上下文))
.build();
ApiInterface service=new Reformation.Builder()
.baseUrl(基本URL).client(okHttpClient)
.build().create(UrlServices.class);
回程服务;
}
公共静态void getContentData(最终对话框、最终调用方法、最终WebResponse WebResponse){
如果(对话框!=null)
AppProgressDialog.show(dialog);
enqueue(新回调()方法){
@凌驾
公共void onResponse(调用、响应){
如果(对话框!=null)
AppProgressDialog.hide(dialog);
JsonUtil.handleResponse(response,webResponse);
}
@凌驾
失败时公共无效(调用、可丢弃){
如果(对话框!=null)
AppProgressDialog.hide(dialog);
webResponse.onResponseFailed(throwable.getMessage());
}
});
}
}
公共界面WebResponse{
void onResponseSuccess(响应结果);
void onResponseFailed(字符串错误);
}
在活动/片段中使用

ReformClient.getContentData(新建对话框(上下文)、ReformClient.service(上下文)、doPlaces(hashMap)、new WebResponse(){
@凌驾
公共void onResponseSuccess(响应结果){
}
@凌驾
公共void onResponseFailed(字符串错误){
}
});
这是我的改装设置

公共接口{
@获取(“place/autocomplete/json?”)
调用doPlaces(@QueryMap-options);}
公共类客户端{
公共静态最终字符串BASE_URL=Enviro