当前位置: 首页 > 知识库问答 >
问题:

当从片段[duplicate]初始化活动时,Android应用程序崩溃

支嘉祥
2023-03-14

我目前正试图在android studio中创建一个日历应用程序。该应用包含一个具有不同“视图”的日历,例如月视图、周视图和日视图。

该应用程序使用片段作为页面,每个视图都是一个活动。

这是片段和按钮初始化每个视图的代码

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;
}

在代码中显示日历月度视图的第一个按钮称为“Calendaractive”正常工作,但当单击显示日历每周视图的第二个按钮时,会导致应用程序崩溃并在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) 

我不确定问题是什么,因为我一直在遵循教程并且其他功能正常工作。我还在下面包含了每个活动的代码。

月景

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

每周查看

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

如有任何建议,将不胜感激。

共有2个答案

公西英叡
2023-03-14

我的建议是:

  • 首先你没有初始化CalendarUtils.selectedDate
  • 用断点覆盖代码。调试或使用要查找的Log. d()消息,哪个变量为空
唐阳泽
2023-03-14

由于指针引用为空,尝试执行monthYearFromDate(CalendanderUtils.selectedDate)insidesetWeekView时引发错误。所以我猜是日历。selectedDate未初始化。

 类似资料:
  • 我有一个由一个活动和几个片段组成的应用程序,由谷歌重新指挥。其他细节在这里。我想保持一个菜单静止和切换我的碎片在容器在中心。 当我启动该活动时,它会初始化一个变量,如代码所示。 但是,当我在fragment onCreate中使用这个变量()时,活动中的绑定行会因,如下面的logcat所示 下面是完整的logcat,我们可以看到第二个sout丢失了,但在这一点上没有抛出错误。

  • 我已经创建了一个简单的主片段页面,其中有一个按钮调用activity类布局,当到达activity类时,该activity类会在单击按钮时回调片段类布局。下面是一个简单的片段类,带有一个调用activity类的简单按钮,它可以正常工作。但一旦打开Acitiviy页面,单击按钮返回片段布局,我每单击一次按钮,应用程序就会崩溃。任何帮助都将不胜感激。 以下错误 JAVAlang.IllegalArgu

  • 我有一个应用程序崩溃的点:“New Downloader(this,mURL);”: 02-25 15:40:55.405 619-619/them.vertretungsplan e/androidruntime:致命异常:main java.lang.verifyerror:thems.vertretungsplan.downloader at thems.vertretungsplan.ve

  • 问题内容: 我有一堂课,称为extends 。 现在,在我的父级活动中,我想“运行”此片段。 这是我的: 如何运行/启动片段?我希望我的方法可以触发。 问题答案: 有很多文档!您需要的一切已经在这里。 当然,您需要在活动布局中使用该容器。

  • 经过测试,它在非android程序上工作,但在android上初始化后立即崩溃。日志cat也没有生成任何错误消息。我从CircularFifoBuffer找到了这个。 编辑2: 08-05 21:12:48.837:I//system/bin/batteryd(1189):1566474 v_bat 3.678(3.677),i_supply 0.500,i_demand 0.282=>v_bat

  • 经过一些调试,我找到了这行代码 导致我的应用程序崩溃,我已经尝试过了 ; 但结果还是一样,有什么帮助吗??