У меня возникают проблемы с этим NumberFormatException Недопустимый длинный. Лог-кошка показывает, что ошибка исходит от части метода Long.parseLong
.NumberFormatException Invalid Long с календарем
public static String getDateTimeStr(String p_time_in_millis) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_TIME_FORMAT);
Date l_time = new Date(Long.parseLong(p_time_in_millis));
return sdf.format(l_time);
}
Может кто-нибудь сказать мне, почему этот код работает отлично, когда я получать и отображать данные в некоторых календарях, то в других календарях на моем устройстве я получаю эту NumberFormatException Invalid Long
пожалуйста?
Edit: Вот остальная часть кода ...
private void getEvents() {
Uri l_eventUri;
ArrayList<Map<String, String>> allStudents = new ArrayList<Map<String, String>>();
if (Build.VERSION.SDK_INT >= 8) {
l_eventUri = Uri.parse("content://com.android.calendar/events");
} else {
l_eventUri = Uri.parse("content://calendar/events");
}
String[] l_projection = new String[]{"title", "dtstart", "dtend"};
@SuppressWarnings("deprecation")
Cursor l_managedCursor = this.managedQuery(l_eventUri, l_projection, "calendar_id=" + m_selectedCalendarId, null, "dtstart DESC, dtend DESC");
if (l_managedCursor.moveToFirst()) {
int l_colTitle = l_managedCursor.getColumnIndex(l_projection[0]);
int l_colBegin = l_managedCursor.getColumnIndex(l_projection[1]);
int l_colEnd = l_managedCursor.getColumnIndex(l_projection[2]);
String l_title = String.valueOf(l_colTitle);
String l_begin = Integer.toString(l_colBegin);
String l_end = Integer.toString(l_colEnd);
do {
Map<String, String> map = new HashMap<String, String>();
l_title = l_managedCursor.getString(l_colTitle);
l_begin = getDateTimeStr(l_managedCursor.getString(l_colBegin));
l_end = getDateTimeStr(l_managedCursor.getString(l_colEnd));
map.put("eventTitles", l_title);
map.put("event_begin", l_begin);
map.put("event_end", l_end);
allStudents.add(map);
} while (l_managedCursor.moveToNext());
l_managedCursor.close();
SimpleAdapter adapter = new SimpleAdapter(this, allStudents, R.layout.notice_layout, new String[] { "eventTitles", "event_begin", "event_end" }, new int[] { R.id.tvTitle, R.id.tvBody, R.id.tvTeacherCode});
listViewCalendar.setAdapter(adapter);
}
}
Edit 2:
По какой-то причине код работает нормально без этой строки кода, так что я прибил его вплоть до этой строки кода.
l_end = getDateTimeStr(l_managedCursor.getString(l_colEnd));
Почему l_colEnd
увязнуть в NumberFormatExcetion
? Когда следующая строка кода может быть также обнаружена в том же NumberFormatException
, потому что она запрашивает один и тот же формат int?
l_begin = getDateTimeStr(l_managedCursor.getString(l_colBegin));
Спасибо тоже всем, кто помог. Другая интересная вещь, и когда я добавить этот
int l_cnt = 0;
do {
++l_cnt;
} while (l_managedCursor.moveToNext() && l_cnt < 100);
к статье while
, как показано ниже, в конце следующего кода приложение отлично работает без каких-либо строк кода бросание NumberFormatException
..
if (l_managedCursor.moveToFirst()) {
int l_cnt = 0;
int l_colTitle = l_managedCursor.getColumnIndex(l_projection[0]);
int l_colBegin = l_managedCursor.getColumnIndex(l_projection[1]);
int l_colEnd = l_managedCursor.getColumnIndex(l_projection[2]);
String l_title = String.valueOf(l_colTitle);
String l_begin = Integer.toString(l_colBegin);
String l_end = Integer.toString(l_colEnd);
do {
Map<String, String> map = new HashMap<String, String>();
l_title = l_managedCursor.getString(l_colTitle);
l_begin = getDateTimeStr(l_managedCursor.getString(l_colBegin));
l_end = getDateTimeStr(l_managedCursor.getString(l_colEnd));
map.put("eventTitles", l_title);
map.put("event_begin", l_begin);
map.put("event_end", l_end);
allStudents.add(map);
++l_cnt;
} while (l_managedCursor.moveToNext() && l_cnt < 100);
невозможно знать, не зная, что p_time_in_millis есть. Попробуйте записать значение этой строки, и вы, вероятно, получите свой собственный ответ. – Bruce
Привет, Bruce, исходящий из этих строк кода l_begin = getDateTimeStr (l_managedCursor.getString (l_colBegin)); l_end = getDateTimeStr (l_managedCursor.getString (l_colEnd)); мысли? – Charlie
ошибка заключается в том, что строка p_time_in_millis в getDateTimestr содержит другие символы, а не только числовые, поэтому, когда u разберем строку в длинной JVM, она не найдет строку как полную числовую строку. Посмотрите этот вопрос http://stackoverflow.com/questions/21896610/why-is-this-code-throwing-numberformatexception-invalid-int?rq=1 – varun