Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将从datepicker中选取的每个日期存储到Android上的内存或数据库中?_Java_Android_Date_Datepicker - Fatal编程技术网

Java 如何将从datepicker中选取的每个日期存储到Android上的内存或数据库中?

Java 如何将从datepicker中选取的每个日期存储到Android上的内存或数据库中?,java,android,date,datepicker,Java,Android,Date,Datepicker,我已经创建了一个日期选择器,用户可以在其中使用borax12库选择起始日期和截止日期。这将打开一个对话框,用户可以在其中设置日期,当他们按“确定”时,它将在此方法中设置日期: @Override public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth,int yearEnd, int monthOfYearEnd, int dayOfMonthEnd) {

我已经创建了一个日期选择器,用户可以在其中使用borax12库选择起始日期和截止日期。这将打开一个对话框,用户可以在其中设置日期,当他们按“确定”时,它将在此方法中设置日期:

 @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth,int yearEnd, int monthOfYearEnd, int dayOfMonthEnd) {
        to.set(Calendar.YEAR, year);
        to.set(Calendar.MONTH, monthOfYear);
        to.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        from = Calendar.getInstance();
        from.set(Calendar.YEAR, yearEnd);
        from.set(Calendar.MONTH, monthOfYearEnd);
        from.set(Calendar.DAY_OF_MONTH, dayOfMonthEnd);

        String date = "You picked the following date: From- "+dayOfMonth+"/"+(++monthOfYear)+"/"+year+" To "+dayOfMonthEnd+"/"+(++monthOfYearEnd)+"/"+yearEnd;
        dateTextView.append(new StringBuilder().append(date) + "\n");
    }

当日期被附加到dateTextView中时,这种方法可以很好地工作。但是,我如何每次都将每个日期存储到arraylist中,并存储到用户手机或数据库的内存中呢?

在初始化类时,只需创建一个arraylist(
List=new arraylist()
),并在需要时使用List.add()。它将在列表中创建多个字符串实例


您可以保存到数据库或类似数据库(甚至保存到文件或服务器),以决定需要什么。

在初始化类时,只需创建一个Arraylist(
List List=new Arraylist()
),并在需要时使用List.add()。它将在列表中创建多个字符串实例


您可以保存到数据库或类似数据库(甚至可以保存到文件或服务器),决定需要什么。

Calendar类现在是遗留类,在Java中被Java.time类取代。对于Android,请参见下面的项目符号

对于没有时间和时区的仅日期值,请使用
LocalDate

LocalDate from = LocalDate.of( year , monthOfYear , dayOfMonth ) ;
要基于现有值获取新值,请使用。该类提供了几个方便的实现。显然你会想要的

对于Java,我建议使用在项目中找到的类跟踪这对
LocalDate
对象。但这些代码并没有被移植到Android上。您可能希望创建该类的自己的简单版本来组合这对

package com.example.javatimestuff;

import org.threeten.bp.Duration;
import org.threeten.bp.LocalDate;

public class DateRange
{

    private LocalDate start, stop;
//    private Duration duration ;  // Cache value if calling `getDuration` frequently.
//    private String stringed ; // Cache value if calling `toString` frequently.

    public DateRange ( LocalDate startArg , LocalDate stopArg )
    {
        this.start = startArg;
        this.stop = stopArg;
    }

    public LocalDate getStart ()
    {
        return this.start;
    }

    public LocalDate getStop ()
    {
        return this.stop;
    }

    public Period toPeriod ()
    {
        Period p = Period.between( this.start , this.stop );
        return p;
    }

    @Override
    public String toString ()
    {
        // Per ISO 8601 standard.
        // https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
        String s = this.start.toString() + "/" + this.stop.toString();
        return s;
    }

    static public LocalDate parse ( String input ) {  // Obviously in real work you would make this safer: check for nulls, check for empty string, check for two parts, catch `DateTimeParseException`.
        String[] parts = input.split( "/" );
        LocalDate start = LocalDate.parse( parts[0]) ;
        LocalDate stop = LocalDate.parse( parts[1]) ;
        DateRange dr = new DateRange(start , stop ) ;
        return dr ;
    }
}
通过构造函数调用该类

DateRange dr = new DateRange( from , to ) ;
存储在我们的自定义类的
日期范围类型的
列表中

List<DateRange> ranges = new ArrayList<>() ;
ranges.add( dr ) ;
List ranges=new ArrayList();
范围。添加(dr);
对于存储。见&


关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

    • 日历类现在是遗留类,在Java中被Java.time类取代。对于Android,请参见下面的项目符号

      对于没有时间和时区的仅日期值,请使用
      LocalDate

      LocalDate from = LocalDate.of( year , monthOfYear , dayOfMonth ) ;
      
      要基于现有值获取新值,请使用。该类提供了几个方便的实现。显然你会想要的

      对于Java,我建议使用在项目中找到的类跟踪这对
      LocalDate
      对象。但这些代码并没有被移植到Android上。您可能希望创建该类的自己的简单版本来组合这对

      package com.example.javatimestuff;
      
      import org.threeten.bp.Duration;
      import org.threeten.bp.LocalDate;
      
      public class DateRange
      {
      
          private LocalDate start, stop;
      //    private Duration duration ;  // Cache value if calling `getDuration` frequently.
      //    private String stringed ; // Cache value if calling `toString` frequently.
      
          public DateRange ( LocalDate startArg , LocalDate stopArg )
          {
              this.start = startArg;
              this.stop = stopArg;
          }
      
          public LocalDate getStart ()
          {
              return this.start;
          }
      
          public LocalDate getStop ()
          {
              return this.stop;
          }
      
          public Period toPeriod ()
          {
              Period p = Period.between( this.start , this.stop );
              return p;
          }
      
          @Override
          public String toString ()
          {
              // Per ISO 8601 standard.
              // https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
              String s = this.start.toString() + "/" + this.stop.toString();
              return s;
          }
      
          static public LocalDate parse ( String input ) {  // Obviously in real work you would make this safer: check for nulls, check for empty string, check for two parts, catch `DateTimeParseException`.
              String[] parts = input.split( "/" );
              LocalDate start = LocalDate.parse( parts[0]) ;
              LocalDate stop = LocalDate.parse( parts[1]) ;
              DateRange dr = new DateRange(start , stop ) ;
              return dr ;
          }
      }
      
      通过构造函数调用该类

      DateRange dr = new DateRange( from , to ) ;
      
      存储在我们的自定义类的
      日期范围类型的
      列表中

      List<DateRange> ranges = new ArrayList<>() ;
      ranges.add( dr ) ;
      
      List ranges=new ArrayList();
      范围。添加(dr);
      
      对于存储。见&


      关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

      该项目现已启动,建议迁移到类

      要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

      从哪里获得java.time类

      • ,及以后
        • 内置的
        • 标准JavaAPI的一部分,带有捆绑实现
        • Java9添加了一些次要功能和修复
        • 大部分java.time功能都在中向后移植到Java6和Java7
        • 该项目专门为Android采用了ThreeTen Backport(如上所述)

      谢谢,如果我使用SharedReferences,用户关闭手机上的所有应用程序,这些数据还会被存储吗?是的,这就是共享首选项的全部要点,即使用户关闭应用程序并重新打开,也会保留数据。如果即使卸载了应用程序也必须保留数据,请尝试将代码保留在文件(如果不是专用的,也可以从手机上的文件管理器中删除)或远程服务器上。谢谢,如果我使用SharedReferences,用户关闭手机上的所有应用程序,这些数据还会被存储吗?是,这就是共享首选项的全部要点,即使用户关闭应用程序并重新打开,也要保留数据。如果您必须保留数据,即使应用程序已卸载,请尝试将代码保留在文件(如果不是专用的,也可以从手机上的文件管理器中删除)或远程服务器上。几乎由同一作者复制相隔小时:几乎由同一作者复制相隔小时:谢谢,它看起来很好,我正在寻找它。我在任何地方都找不到它。我怎样才能在Android上将这三个额外的库编译成build.gradle?此外,如果我序列化Arraylist,如果用户关闭应用程序,是否仍可以访问该列表?@Samantha阅读我发布的链接。一个是关于如何使用ThreeTenABP的,另一个是关于序列化的。另外:&。啊,谢谢。那么三张十美元的钞票和另外三张十美元的钞票一样吗?我读到它与在android上使用Joda time基本相同@萨曼莎,我在这个回答中已经提到了这一点。我强烈建议你放慢脚步,多读书,少发帖。有关讨论,请参阅。谢谢您的帮助,它看起来不错,我正在寻找它。我到处都找不到。我怎么能编译这三个额外的libr呢