Как передать данные JSON в CalenderView onSelectedDayChange ()? - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу передать данные из API (вызываемого с помощью Retrofit) в событие onClick () календарной даты (onSelectedDayChange).

public class MainActivity extends AppCompatActivity {
List<APIData> dataList;
private CalendarView mCalendarView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mCalendarView=  findViewById(R.id.calendarView);
    Calendar rightNow = Calendar.getInstance();
    mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {

        @Override
        public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
            month = 1+month;
            Toast.makeText(getApplicationContext(), ""+year+"-"+month+"-"+dayOfMonth,Toast.LENGTH_SHORT).show();

        }
    });


    APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
    Call<APIData> call = apiInterface.gethistorydetails("s10-1", "2018-08-01");
    call.enqueue(new Callback<APIData>() {
        @Override
        public void onResponse(Call<APIData> call, Response<APIData> response) {
            Log.d("TAG",response.code()+"");
            APIData apiData = response.body();
        }
        @Override
        public void onFailure(Call<APIData> call, Throwable t) {

        }
    });

}

}

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

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

В этом случае вы должны вызывать API каждый раз, когда вы меняете дату в календаре. Этот API предоставит вам данные в своем ответе, просто установите эти данные в ваших полях.

Есть несколько шагов, чтобы следовать.

1 - В методе onSelectedDayChange для datePicker вы получаете «int year, int month, int dayOfMonth». Преобразуйте эти поля в формат даты, понятный вашему API. Чтобы узнать, как преобразовать эти поля в формат даты, перейдите по этой ссылке Создание объекта даты Java из года, месяца, дня

2 - Теперь вызовите этот APi, этот API вернет вам результат этих 4 полей в своем ответе.

3- Просто отобразите эти данные в этих полях.

Тебе понравился код

    @Override
    public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
         Calendar cal= Calendar.getInstance();
         cal.set(year, month - 1, dayOfMonth, 0, 0);  
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         String date=format.formate(cal.getTime());


         APIInterface apiInterface = APIClient.getClient().create(APIInterface.class);
         Call<APIData> call = apiInterface.gethistorydetails("s10-1", date);
         call.enqueue(new Callback<APIData>() {
            @Override
            public void onResponse(Call<APIData> call, Response<APIData> response) {
                Log.d("TAG",response.code()+"");
                APIData apiData = response.body();

                // Here you will get data from this api and display it on your required fields
               }
           @Override
            public void onFailure(Call<APIData> call, Throwable t) {

           }
});
0 голосов
/ 18 сентября 2018

Предполагается, что у вас есть все 4 даты из объекта APIData.Преобразуйте дату (2018-09-09) в timeInMillis и установите дату в calendarView при нажатии соответствующих полей даты: -

bus_arrival.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCalendarView.setDate(timeInMillis);
        }
    });
check_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCalendarView.setDate(timeInMillis);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...