I'm stuck somewhere in between getting json array inside a object setting to recview, I have to send a key to fetch data in. Didn't get solutions here

Viewed 13

I'm stuck somewhere in between getting json array inside a object setting it to recylerview, I have to send a key to fetch data and getting response in json array inside a object. Didn't understand solutions got here, so I'm here if Somebody can help mre understand.

////Main class

public class today_doctors extends AppCompatActivity {
    viewModel_doc listViewModel;
    List<model_doc> datalist;
    todayDoctorAdapter adapter;
    TextView clinic_name;
    RecyclerView recview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_today_doctors);
        recview=findViewById(R.id.rv);
        recview.setLayoutManager(new LinearLayoutManager(this));
        recview.addItemDecoration(new DividerItemDecoration(this, 0));
        adapter=new todayDoctorAdapter(datalist);
        recview.setAdapter(adapter);
        clinic_name=findViewById(R.id.tvDrName);
        process();
      
    }

public void process(){
    listViewModel=  new ViewModelProvider(this).get(viewModel_doc.class);
    listViewModel.getDatalistObserver  ().observe(this, new Observer<List<model_doc>>() {

        @Override
        public void onChanged(List<model_doc> Models) {
            if(Models!=null) {
                datalist= Models;
                adapter.updateList(Models);
            }
            else
            {
                recview.setVisibility(View.GONE);
                Toast.makeText(today_doctors.this, "No data recieved", Toast.LENGTH_SHORT).show();
            }
        }
    });
    listViewModel.makeApiCall();
}

//////////Viewmodel class

public class viewModel_doc extends ViewModel
{
    private MutableLiveData<List<model_doc>> datalist2;

    public viewModel_doc(){
        datalist2=new MutableLiveData<>();
    }

    public MutableLiveData<List<model_doc>> getDatalistObserver()
    {
        return datalist2;
    }

    public void makeApiCall()
    {

        apiSet apiServices= apiController.getInstance().getApi();
        Call<List<model_doc>> calldoc=apiServices.getList2("ll0004");

        calldoc.enqueue(new Callback<List<model_doc>>() {
            @Override
            public void onResponse(Call<List<model_doc>> call, Response<List<model_doc>> response) {
                datalist2.postValue(response.body());
            }

            @Override
            public void onFailure(Call<List<model_doc>> call, Throwable t) {
                datalist2.postValue(null);
                Log.e("Error :",t.getMessage());
            }
        });


    }


}

///////////////////main model

public class model_doc {
    String status,msg;
    ArrayList<Data> data;

    public model_doc(String status, String msg, ArrayList<Data> data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public String getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }

    public ArrayList<Data> getData() {
        return data;
    }

    public static class Data {
        String doctor_id;
        String doctor_name;
        String proposed_date;
        String date;
        // Getters setters

        public Data(String doctor_id, String doctor_name, String proposed_date, String date) {
            this.doctor_id = doctor_id;
            this.doctor_name = doctor_name;
            this.proposed_date = proposed_date;
            this.date = date;
        }

        public String getDoctor_id() {
            return doctor_id;
        }

        public String getDoctor_name() {
            return doctor_name;
        }

        public String getProposed_date() {
            return proposed_date;
        }

        public String getDate() {
            return date;
        }
    }
}

////api interface

@FormUrlEncoded
  @POST("doctor_list")
    Call<List<model_doc>>getList2(
@Field("clinic_id") String clinic_id
);

//////////////////controller

public class apiController {
    private static final String url="https://xyz.in/api/";
    private static apiController clientObject;
    private static Retrofit retrofit;

    apiController()
    {
        retrofit=new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    public static synchronized apiController getInstance(){
        if(clientObject==null)
            clientObject=new apiController();
        return clientObject;
    }
    public apiSet getApi(){

        return retrofit.create(apiSet.class);
    }

}

////////////recycler adapter, made some changes in main model for nested data could handle it to adapter

public class todayDoctorAdapter extends RecyclerView.Adapter<todayDoctorAdapter.viewholder>

{

    List<model_doc> datalist2;
    public todayDoctorAdapter(List<model_doc> list){

        this.datalist2=list;}

    public void updateList(List<model_doc>list){
        this.datalist2=list;
        notifyDataSetChanged();
    }
    @NonNull
    @Override
    public todayDoctorAdapter.viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_doctors,parent,false);
        return new todayDoctorAdapter.viewholder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull todayDoctorAdapter.viewholder holder, int position){


        holder.doctor_name.setText(String.format("Dr.%s", datalist2.get(position).getDoctor_app()));
        holder.proposed_date.setText(String.format("Apt: %s","TODAY"));

        String doc=datalist2.get(position).getDoctor_app();

        holder.cv.setOnClickListener(
                new View.OnClickListener(){
                    @Override
                    public void onClick(View arg0) {
                        Intent intent = new Intent(arg0.getContext(), PatientsUnderDoctor.class);
                        intent.putExtra("doc_name", doc);
                        arg0.getContext().startActivity(intent);
                    }
                });

    }
    @Override
    public int getItemCount(){
        if (this.datalist2!=null){
            return this.datalist2.size();
        }
        return 0;

    }

    public static class viewholder extends RecyclerView.ViewHolder{

        TextView doctor_name,proposed_date;
        CardView cv;

        public viewholder(@NonNull View itemView) {
            super(itemView);

            doctor_name=itemView.findViewById(R.id.drName);
            proposed_date=itemView.findViewById(R.id.apptDate);
            cv=itemView.findViewById(R.id.cv_patient);
        }
    }
}

//////////////////json data look like this

{
    "status": "success",
    "msg": "Found",
    "data": [
        {
            "doc_code": "jhjh0001",
            "app_date": "2022-09-13",
            "doc_name": "kjk",
            "count": 1
        }
    ]
}
0 Answers
Related