- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作日历,但是当我点击日历日时,它崩溃了。我检查了代码好几次,但它总是崩溃。
我将发布相关代码和logcat。
谢谢
MonthNewFragment.JAVA
public class MonthNewFragment extends Fragment implements View.OnClickListener {
private final Utils utils = Utils.getInstance();
private CalendarMainFragment calendarMainFragment;
private PersianDate persianDate;
public MonthNewFragment monthNewFragment;
public MonthAdapter monthAdapter;
public CalendarAdapter calendarAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.calendar_month, container, false);
int offset = getArguments().getInt("offset");
List<DayEntity> days = utils.getDays(getContext(), offset);
char[] digits = utils.preferredDigits(getActivity());
IconTextView prev = (IconTextView) view.findViewById(R.id.prev);
IconTextView next = (IconTextView) view.findViewById(R.id.next);
prev.setOnClickListener(this);
next.setOnClickListener(this);
persianDate = utils.getToday();
int month = persianDate.getMonth() - offset;
month -= 1;
int year = persianDate.getYear();
year = year + (month / 12);
month = month % 12;
if (month < 0) {
year -= 1;
month += 12;
}
month += 1;
persianDate.setMonth(month);
persianDate.setYear(year);
persianDate.setDayOfMonth(1);
TextView currentMonthTextView = (TextView) view.findViewById(R.id.currentMonthTextView);
currentMonthTextView.setText(Utils.textShaper(utils.getMonthName(persianDate)));
TextView currentYearTextView = (TextView) view.findViewById(R.id.currentYearTextView);
currentYearTextView.setText(Utils.formatNumber(persianDate.getYear(), digits));
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(), 7);
recyclerView.setLayoutManager(layoutManager);
monthAdapter = new MonthAdapter(getActivity(), this, days);
monthAdapter = new MonthAdapter(getActivity(), this, days);
recyclerView.setAdapter(monthAdapter);
calendarMainFragment = (CalendarMainFragment) getActivity()
.getSupportFragmentManager()
.findFragmentByTag(CalendarMainFragment.class.getName());
if (calendarMainFragment != null) {
calendarMainFragment.selectDay(utils.getToday());
}
return view;
}
public void onClickItem(PersianDate day) {
calendarMainFragment.selectDay(day);
}
public void onLongClickItem(PersianDate day) {
calendarMainFragment.addEventOnCalendar(day);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.next:
calendarMainFragment.changeMonth(1);
break;
case R.id.prev:
calendarMainFragment.changeMonth(-1);
break;
}
}
}
MonthAdapter.JAVA
public class MonthAdapter extends RecyclerView.Adapter<MonthAdapter.ViewHolder> {
private final Context context;
public final CalendarMainFragment calendarMainFragment;
private final MonthNewFragment monthNewFragment;
private static final int TYPE_HEADER = 0;
private static final int TYPE_DAY = 1;
private List<DayEntity> days;
private int selectedDay = -1;
public MonthAdapter(Context context, MonthNewFragment monthNewFragment, List<DayEntity> days) {
this.monthNewFragment = monthNewFragment;
this.context = context;
this.days = days;
calendarMainFragment = null;
}
**CalendarMainFragment.JAVA
public class CalendarMainFragment extends Fragment implements View.OnClickListener {
public static final int MONTHS_LIMIT = 1200;
private ViewPager viewPager;
private final Utils utils = Utils.getInstance();
private int day;
private Calendar c = Calendar.getInstance();
private char[] digits;
private boolean clockIn24;
private Coordinate coord;
private TextView weekDayName;
private TextView miladiDate;
private TextView ghamariDate;
private TextView shamsiDate;
private TextView eventTitle;
private TextView today;
private CardView owghat;
private CardView event;
private View divider1;
private View divider2;
private View divider3;
private View divider4;
private View divider5;
private View divider6;
private View divider7;
@Nullable
@Override
public View onCreateView(
LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_new_calendar, container, false);
divider1 = view.findViewById(R.id.div1);
divider2 = view.findViewById(R.id.div2);
divider3 = view.findViewById(R.id.div3);
divider4 = view.findViewById(R.id.div4);
divider5 = view.findViewById(R.id.div5);
divider6 = view.findViewById(R.id.div6);
divider7 = view.findViewById(R.id.div7);
miladiDate = (TextView) view.findViewById(R.id.miladi_date);
ghamariDate = (TextView) view.findViewById(R.id.ghamari_date);
weekDayName = (TextView) view.findViewById(R.id.week_day_name);
shamsiDate = (TextView) view.findViewById(R.id.shamsi_date);
miladiDate = (TextView) view.findViewById(R.id.miladi_date);
ghamariDate = (TextView) view.findViewById(R.id.ghamari_date);
today = (TextView) view.findViewById(R.id.today);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView);
azan1 = (TextView) view.findViewById(R.id.azan1);
azan2 = (TextView) view.findViewById(R.id.azan2);
azan3 = (TextView) view.findViewById(R.id.azan3);
azan4 = (TextView) view.findViewById(R.id.azan4);
azan5 = (TextView) view.findViewById(R.id.azan5);
aftab1 = (TextView) view.findViewById(R.id.aftab1);
aftab2 = (TextView) view.findViewById(R.id.aftab2);
aftab3 = (TextView) view.findViewById(R.id.aftab3);
eventTitle = (TextView) view.findViewById(R.id.event_title);
CardView infoDay = (CardView) view.findViewById(R.id.info_day);
owghat = (CardView) view.findViewById(R.id.owghat);
event = (CardView) view.findViewById(R.id.event);
viewPager = (ViewPager) view.findViewById(R.id.calendar_pager);
utils.loadHolidays(getResources().openRawResource(R.raw.holidays));
utils.loadLanguageFromSettings(getContext());
digits = utils.preferredDigits(getContext());
clockIn24 = utils.clockIn24(getContext());
coord = utils.getCoordinate(getContext());
ptc = new PrayTimesCalculator(utils.getCalculationMethod(getContext()));
viewPager.setAdapter(new CalendarAdapter(getActivity().getSupportFragmentManager()));
viewPager.setCurrentItem(MONTHS_LIMIT / 2);
infoDay.setOnClickListener(this);
owghat.setOnClickListener(this);
today.setOnClickListener(this);
return view;
}
public void changeMonth(int position) {
viewPager.setCurrentItem(viewPager.getCurrentItem() + position, true);
}
public void selectDay(PersianDate persianDate) {
CivilDate civilDate = DateConverter.persianToCivil(persianDate);
weekDayName.setText(utils.getWeekDayName(persianDate));
shamsiDate.setText(utils.dateToString(persianDate, digits));
miladiDate.setText(utils.dateToString(civilDate, digits));
ghamariDate.setText(utils.dateToString(DateConverter.civilToIslamic(civilDate), digits));
if (isToday(civilDate)) {
today.setVisibility(View.GONE);
} else {
today.setVisibility(View.VISIBLE);
}
setOwghat(civilDate);
showEvent(persianDate);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void addEventOnCalendar(PersianDate persianDate) {
Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setData(CalendarContract.Events.CONTENT_URI);
CivilDate civil = DateConverter.persianToCivil(persianDate);
intent.putExtra(CalendarContract.Events.DESCRIPTION,
utils.dayTitleSummary(persianDate, digits));
Calendar time = Calendar.getInstance();
time.set(civil.getYear(), civil.getMonth() - 1, civil.getDayOfMonth());
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,
time.getTimeInMillis());
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,
time.getTimeInMillis());
intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);
startActivity(intent);
}
private void showEvent(PersianDate persianDate) {
String holidayTitle = utils.getHolidayTitle(persianDate);
if (holidayTitle != null) {
eventTitle.setText(holidayTitle);
event.setVisibility(View.VISIBLE);
} else {
event.setVisibility(View.GONE);
}
}
private void setOwghat(CivilDate civilDate) {
if (coord == null) {
return;
}
c.set(civilDate.getYear(), civilDate.getMonth() - 1, civilDate.getDayOfMonth());
Date date = c.getTime();
Map<PrayTime, Clock> prayTimes = ptc.calculate(date, coord);
owghat.setVisibility(View.VISIBLE);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.info_day:
miladiDate.setVisibility(View.VISIBLE);
ghamariDate.setVisibility(View.VISIBLE);
break;
case R.id.owghat:
divider1.setVisibility(View.VISIBLE);
divider2.setVisibility(View.VISIBLE);
divider3.setVisibility(View.VISIBLE);
divider4.setVisibility(View.VISIBLE);
divider5.setVisibility(View.VISIBLE);
divider6.setVisibility(View.VISIBLE);
divider7.setVisibility(View.VISIBLE);
break;
case R.id.today:
bringTodayYearMonth();
break;
}
}
private void bringTodayYearMonth() {
if (viewPager.getCurrentItem() != MONTHS_LIMIT / 2) {
viewPager.setCurrentItem(MONTHS_LIMIT / 2);
}
selectDay(Utils.getToday());
}
private boolean isToday(CivilDate civilDate) {
CivilDate today = new CivilDate();
return today.getYear() == civilDate.getYear()
&& today.getMonth() == civilDate.getMonth()
&& today.getDayOfMonth() == civilDate.getDayOfMonth();
}
}
Logcat
04-18 21:21:50.244 16192-16192/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.playpersia.mycustomizedtoolbar, PID: 16192
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.playpersia.taghvimebastani.CalendarMainFragment.selectDay(com.playpersia.tag hvimebastani.PersianDate)' on a null object reference
at com.playpersia.taghvimebastani.MonthNewFragment.onClickItem(MonthNewFragment.java:98)
at com.playpersia.taghvimebastani.MonthAdapter$ViewHolder.onClick(MonthAdapter.java:58)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
最佳答案
您的 onclick 方法不会测试 calendarMainFragement 是否为 null。从堆栈看来,这就是它即将消亡的地方。
at com.playpersia.taghvimebastani.MonthNewFragment.onClickItem(MonthNewFragment.java:98)
尝试在 onClickItem 处理程序上添加 null 测试。
public void onClickItem(PersianDate day) {
if (calendarMainFragment != null) {
calendarMainFragment.selectDay(day);
}
}
关于java - 致命异常 : java. lang.NullPointerException:尝试在空对象引用 onClickItem 上调用虚拟方法 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700493/
说真的,你怎么能在不发疯的情况下处理所有这些异常呢?我是不是读了太多关于异常处理的文章或什么?我尝试重构了几次,但每次似乎都以更糟糕的结果告终。也许我应该承认确实会发生异常(exception)情况,
背景 两者 try/rescue和 try/catch是 Elixir 中的错误处理技术。根据 corresponding chapter在介绍指南中。 Errors can be rescued u
每当我尝试在 Raspberry PI 上运行此 python 脚本时,我都会遇到问题: import socket import sys # Create a TCP/IP socket sock
我想知道一些关于 PHP 的 try , catch声明。 让我们考虑以下示例。 abstract class ExceptionA extends Exception {} class Except
我的 laravel v5.4 项目中有两个模型,user 和 admin。 在 config/auth.php 中,我向守卫和提供者添加了管理员,如下所示: 'guards' => [ 'w
try: r = requests.get(url, params={'s': thing}) except requests.ConnectionError, e: print e
我有以下代码。 但是,它并不能捕获所有错误,而我仍然会收到“throw er;//未处理的'错误'事件”。 为什么是这样? app.post('/api/properties/zip/:zip/bed
问题与细节 我正在使用自定义错误处理,遇到的错误之一是“路径中的非法字符”。我有一个自定义函数,旨在通过路径字符串查找此类非法字符,并在找到它们时引发自定义错误。但是我发现,取决于非法字符,Test-
This question already has answers here: How do I catch a numpy warning like it's an exception (not j
我正在使用其他人的代码,但我不熟悉try/catch,因此我举了一个类似的小例子。在第11行上,如果我写了error(''),似乎没有发现错误并增加了索引j。但是,编写error(' ')或error
我在我的一个程序中遇到了这个问题,在这种情况下,尝试/异常(exception)的错误使程序变得更好,以防用户意外输入了他们不应该输入的内容。它仍然给我错误,我为为什么感到困惑。如果对我的问题确实很重
我在尝试TRY ... CATCH块时遇到问题。有人可以解释为什么以下代码无法执行我的sp吗? DECLARE @Result int SET @Result = 0 BEGIN TRY SE
我有一个相当大的 powershell 脚本,其中包含许多(20 多个)执行各种操作的函数。 现在所有代码实际上都没有任何错误处理或重试功能。如果某个特定的任务/功能失败,它就会失败并继续。 我想改进
为什么我尝试时需要导入 inputmismatchException catch(InputMismatchException e){ System.out.println("
我对此感到困惑 - 我为辅助方法编写了一个 try/catch 。它的目的是捕获任何无效输入(任何不是“男性”或“女性”的内容(没有特定情况)。如果输入无效,它将通知用户,然后让他们重试。如果有效,则
我有时会发现自己处于如下场景。尽可能简单地陈述问题 “有时我会创建一段代码,Java 让我将其包含在 try/catch 语句中。我没有使用 catch,所以我将其留空。为什么这是错误的?” boo
我有点困惑为什么当我不使用 Try block 时会出现 Try block 错误。 我在代码块底部附近收到错误通知。如果我不使用 try/catch,有人可以向我解释为什么会发生这种情况吗? 它是否
我已经盯着我的电脑两个小时了,我不知道我做错了什么。谁能帮助我看到光明? package blackjack; import java.util.Random; import java.util.Sc
我想将方法保存在 Enum 中,但 Class.getDeclaredMethod 抛出 NoSuchMethodException,那么我该如何处理呢?我的代码: public enum Car
这个问题已经有答案了: Executing multi-line statements in the one-line command-line (18 个回答) 已关闭 3 年前。 如何使用try.
我是一名优秀的程序员,十分优秀!