【问题标题】:How can I save two or more data in same object[0]如何在同一个对象中保存两个或多个数据[0]
【发布时间】:2018-02-23 04:37:28
【问题描述】:

我将日期数据(来自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 日,我只能看到一个日期,即 2017 年 9 月 14 日。我该如何解决这个问题?

编辑:我认为这是因为 item[0] = myTime 这只是一个。如果我添加两个类似的,我可以并排传递两个日期,但我希望这适用于所有选定的日期。

Edit2:我使用来自 GitHub 的库。我的大部分代码都与此类似:link。我刚刚更改了具体细节。

Edit3:当我根据建议添加这些来解决问题时,我得到了这些错误。我该如何解决这个问题?

data.add((Object[]) data.get(0)[0]);
data.add((Object[]) data.get(1)[0]);

java.lang.IndexOutOfBoundsException:索引:0,大小:0

data.add( 0, (Object[]) item[0]);
data.add( 1, (Object[]) item[0]);

java.lang.ClassCastException:java.lang.Long 无法转换为 java.lang.Object[]

【问题讨论】:

  • 您可以传递日期数组,而不是单个字符串,并在第二个活动中一次解析单个对象。
  • 你能详细说明一下吗?喜欢一步一步。谢谢@procrastinator
  • 你是如何传递两个日期的?例如,如果您传入13/09/2017;14/09/2017,然后将输入日期拆分为';'您需要在拆分后格式化每个日期。
  • 这是真的。我不能同时通过它们。当我通过其中一个时,它会随着另一个而改变。我在问如何在不拆分的情况下解决这个问题? @Sheldon
  • 我的意思是在您的代码中拆分,而不是日期。我会输入一个答案。您仍然可以将它们作为一个字符串变量传递。

标签: java android date timestamp


【解决方案1】:

您将下一次添加到名为itemObject 数组中,然后将其放入名为dataList 中。

取决于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);
}

然后在代码的其他地方:

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

编辑:Edit3 错误的解决方案: 只需将整个项目对象添加到数据中,就像您在原始代码中所做的那样 data.add(item); 那么你就可以在代码的其他地方使用time = data.get(0)[0];

【讨论】:

  • 您需要使用该语句的结果。例如System.out.println(data.get(0)[0]);
  • 非常感谢您的帮助,您很棒,但是没有 println 可以吗?因为我看过了,但我找不到写它的地方。
  • 你想对这些日期做什么?您可以在需要时使用 data.get(0)[0] 从数据对象中访问它们。
  • data.add((Object[]) data.get(0)[0]); data.add((Object[]) data.get(1)[0]); data.add(item); java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 你知道这个错误吗?
  • 您添加到数据中的 Object[] 是第一步为空。所以你不能从中得到任何东西。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多