我将日期数据(来自CalendarView
对象)发送到第二个活动。
这是第一项活动:
String date = year + "/" + month + "/" + day;
intent=new Intent(Main3Activity.this,MainActivity.class);
intent.putExtra("date",date);
我通过将其转换为第二个活动中的时间戳来获得它。所以,我可以选择一个日期,我可以在第二个活动中看到它,它可以正常使用1个日期。这是第二项活动:
// Create objects
Object[] item;
String s;
DateFormat formatter;
Date date2;
Timestamp timeStampDate;
List<Object[]> data;
long myTime;
myTime11 = sharedPreferences.getLong("long1",0);
s= getIntent().getStringExtra("date");
if(s != null) {
formatter = new SimpleDateFormat("yyyy/MM/dd");
try {
date2 = formatter.parse(s);
timeStampDate = new Timestamp((date2.getTime()));
myTime = timeStampDate.getTime();
editor.putLong("long1",myTime);
editor.commit();
} catch (ParseException e) {
e.printStackTrace();
}
item = new Object[COLUMN_NAMES.length];
item[0] = myTime11;
item[1] = 3;
item[2] = 6;
item[3] = 9;
data.add(item);
}
item = new Object[COLUMN_NAMES.length];
item[0] = timestamp;
item[1] = 0;
item[2] = 0;
item[3] = 0;
data.add(item);
cursor.addAll(data);
return item;
}
但是,当我选择第二个日期时,第一个数据会消失。
例如,我选择13/09/2017。好的,它通过但是如果我想再次通过第一个活动从CalendarView对象传递14/09/2017,那么我无法看到13/09/2017。它改为2017年9月14日,我只能看到一个日期是14/09/2017。我该如何解决这个问题?
编辑:我认为这是因为item [0] = myTime只是一个。如果我添加两个这样的,我可以并排传递两个日期,但我希望这适用于所有选定的日期。
Edit2:我使用GitHub中的库。我的大多数代码与此类似:link。我刚刚更改了具体细节。
Edit3:当我通过建议添加这些来解决问题时,我得到了这些错误。我该如何解决这个问题?
data.add((Object[]) data.get(0)[0]);
data.add((Object[]) data.get(1)[0]);
java.lang.IndexOutOfBoundsException:Index:0,Size:0
data.add( 0, (Object[]) item[0]);
data.add( 1, (Object[]) item[0]);
java.lang.ClassCastException:java.lang.Long无法强制转换为java.lang.Object []
答案 0 :(得分:2)
您下次将Object
数组添加到名为item
的数组中,然后将其添加到名为List
的{{1}}中。
根据创建data
的时间,这将导致第二(和第三)日期的问题消失。如果在代码中创建data
作为私有字段(在第二个操作运行之前)。像这样:
data
然后使用您的代码和// in the class file:
private List<Object[]> data = new ArrayList<Object[]>();
对象选择几个日期。当您想要获取日期时,请在新的操作/方法中使用它:
CalendarView
或者您可以使用它从数据列表中获取指定的日期:
public void printDates()
{
System.out.println(data.get(0)[0]); // gives the first date 2017/09/13
System.out.println(data.get(1)[0]); // gives the second date 2017/09/14
}
然后代码中的其他地方:
public Object getLastIthDate(int i)
{
return data.get(list.size() - i - 1);
}
编辑:Edit3的错误解决方案:
只需将整个项目对象添加到数据中,就像在原始代码中一样
System.out.println(getLastIthDate(1)); // gives the second last date that was saved: 2017/09/13
System.out.println(getLastIthDate(0)); // gives the last date that was saved: 2017/09/14
然后您就可以在代码中的其他位置使用data.add(item);
。