-1

I am currently trying to create a calendar app in android studio. The app contains a calendar with different "Views" e.g. monthly view, weekly view, and daily view.

The app uses fragments as pages and each view is an activity.

This is the code for the fragment and buttons to initialise each view

public class CalendarFragment extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_calendar, container, false);
    Button btn1 = (Button) v.findViewById(R.id.openCalendar);
    btn1.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View v)
        {
            Intent intent = new Intent(getActivity(),CalendarActivity.class);
            startActivity(intent);

        }
    });

    Button btn2 = (Button) v.findViewById(R.id.openWeek);
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            Intent intent = new Intent(getActivity(), WeekViewActivity.class);
            startActivity(intent);
        }
    });
    return v;
}

The first button which displays the monthly view of the calendar called "CalendarActivity" in code works fine but when the second button is clicked which displays the weekly view of the calendar, causes the app to crash and gives the following error in the logcat

2022-05-13 14:44:59.642 15183-15183/com.example.finalyearproject E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.finalyearproject, PID: 15183
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.finalyearproject/com.example.finalyearproject.WeekViewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDate.format(java.time.format.DateTimeFormatter)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3685)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3842)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2252)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loopOnce(Looper.java:201)
    at android.os.Looper.loop(Looper.java:288)
    at android.app.ActivityThread.main(ActivityThread.java:7842)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.time.LocalDate.format(java.time.format.DateTimeFormatter)' on a null object reference
    at com.example.finalyearproject.CalendarUtils.monthYearFromDate(CalendarUtils.java:16)
    at com.example.finalyearproject.WeekViewActivity.setWeekView(WeekViewActivity.java:40)
    at com.example.finalyearproject.WeekViewActivity.onCreate(WeekViewActivity.java:29)
    at android.app.Activity.performCreate(Activity.java:8054)
    at android.app.Activity.performCreate(Activity.java:8034)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1341)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3666)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3842) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2252) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loopOnce(Looper.java:201) 
    at android.os.Looper.loop(Looper.java:288) 
    at android.app.ActivityThread.main(ActivityThread.java:7842) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) 

I am not sure what the problem is as I have been following a tutorial and the other features work. I have also included the code for each activity below.

Monthly View

public class CalendarActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener {
private TextView monthYearText;
private RecyclerView calendarRecyclerView;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_calendar);
    initWidgets();
    CalendarUtils.selectedDate = LocalDate.now();
    setMonthView();
}

private void initWidgets()
{
    calendarRecyclerView = findViewById(R.id.calendarRecyclerView);
    monthYearText = findViewById(R.id.monthYearTV);
}

private void setMonthView()
{
    monthYearText.setText(monthYearFromDate(CalendarUtils.selectedDate));
    ArrayList<LocalDate> daysInMonth = daysInMonthArray(CalendarUtils.selectedDate);

    CalendarAdapter calendarAdapter = new CalendarAdapter(daysInMonth, this);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7);
    calendarRecyclerView.setLayoutManager(layoutManager);
    calendarRecyclerView.setAdapter(calendarAdapter);
}

public void nextMonth(View view)
{
    CalendarUtils.selectedDate = CalendarUtils.selectedDate.plusMonths(1);
    setMonthView();
}

public void previousMonth(View view)
{
    CalendarUtils.selectedDate = CalendarUtils.selectedDate.minusMonths(1);
    setMonthView();
}

Weekly View

public class WeekViewActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener {
private TextView monthYearText;
private RecyclerView calendarRecyclerView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_week_view);
    initWidgets();
    setWeekView();
}

private void initWidgets()
{
    calendarRecyclerView = findViewById(R.id.calendarRecyclerView);
    monthYearText = findViewById(R.id.monthYearTV);
}

private void setWeekView()
{
    monthYearText.setText(monthYearFromDate(CalendarUtils.selectedDate));
    ArrayList<LocalDate> days = daysInWeekArray(CalendarUtils.selectedDate);

    CalendarAdapter calendarAdapter = new CalendarAdapter(days, this);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7);
    calendarRecyclerView.setLayoutManager(layoutManager);
    calendarRecyclerView.setAdapter(calendarAdapter);
}



public void previousWeek(View view)
{
    CalendarUtils.selectedDate = CalendarUtils.selectedDate.minusWeeks(1);
    setWeekView();
}

public void nextWeek(View view)
{
    CalendarUtils.selectedDate = CalendarUtils.selectedDate.plusWeeks(1);
    setWeekView();
}

Any suggestions would be greatly appreciated.

1 Answers1

-2

My suggestions:

  • Firstly you didn't initialized CalendarUtils.selectedDate
  • Cover code with breakpoints for. debugging or with Log.d() messages to find, which variable is null