2017-09-03 6 views
0

私は、ユーザーがborax12ライブラリを使用してfrom/to dateを選択できるdatepickerを作成しました。日付がdateTextViewに追加されますので、これは正常に動作datepickerから選択した各日付をAndroidのメモリまたはデータベースに保存するにはどうすればよいですか?

@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"); 
    } 

:これは、ユーザーが日付を設定することができ、彼らは[OK]を押したとき、それは、このメソッドに日付を設定しますダイアログが表示されます。しかし、毎回各日付をarraylistに、ユーザーの電話やデータベースのメモリに保存することはできますか?

+1

近く離れて同じ作者の時間で複製:(https://stackoverflow.com/ [にしてから入力された日付は来年のために現在の日付に等しい場合はどのように継続的に確認することができますか?] q/46025288/642706) –

答えて

0

クラスを初期化するときに単にArraylist(List<String> list= new Arraylist())を作成し、必要に応じてlist.add()を使用します。あなたのリストの中に複数のStringインスタンスを作成します。

SharedPreferencesまたはSqLite(またはファイルまたはサーバー)のようなDBに保存して、必要なものを決定することができます。

+0

SharedPreferencesを使用しても、ユーザーが電話機のすべてのアプリケーションを閉じても、このデータは保存されますか? – Sam

+0

はい、これは、ユーザーがアプリを閉じて再度開いてもデータを保持するための共有設定の要点です。アプリケーションをアンインストールしてもデータを保持する必要がある場合は、コードをファイルに保存することを参照してください(プライベートでない場合は電話のファイルマネージャからも削除できます)。 – Gil

2

クラスCalendarは、Javaではjava.timeクラスによって置き換えられています。 Androidの場合は、下記の箇条書きを参照してください。

時間帯がなく時間帯がない日付のみの値の場合は、LocalDateを使用してください。

LocalDate from = LocalDate.of(year , monthOfYear , dayOfMonth) ; 

既存の値に基づいて新しい値を取得するには、TemporalAdjusterを使用します。クラスTemporalAdjustersは、いくつかの便利な実装を提供します。どうやら、あなたはlastDayOfYearがほしいでしょう。 Java用

LocalDate to = from.with(TemporalAdjusters.lastDayOfYear()) ; 

、私はThreeTen-Extraプロジェクトで見つかったLocalDateRangeクラスを使用して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) ; 

タイプDateRangeListで保管し、当社のカスタムクラス。

List<DateRange> ranges = new ArrayList<>() ; 
ranges.add(dr) ; 

serialize the Listの場合。参照:Wikipedia & Oracle Tutorial java.timeについて


java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.DateCalendar、& SimpleDateFormatなど、面倒な古いlegacy日時クラスに取って代わります。

maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。

詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。

ここで、java.timeクラスを取得するには?

  • Java SE 8Java SE 9、以降
    • 内蔵しています。
    • バンドルされた実装の標準Java APIの一部です。
    • Java 9には、いくつかのマイナーな機能と修正が加えられています。
  • Java SE 6Java SE 7
    • java.time機能の多くはThreeTen-BackportのJava 6 & 7に戻って、移植されます。
  • Android
      ThreeTenABP
    • プロジェクトは、具体的にはAndroid用(上記)ThreeTen-バックポートを適応させます。
    • How to use ThreeTenABP…を参照してください。
+0

これはありがとう、それは良いと私が探している探しています。 ThreeTen-ExtraライブラリをAndroidでbuild.gradleにコンパイルするにはどうしたらいいですか?また、私がArraylistをシリアル化すれば、ユーザーがアプリケーションを閉じるとこれにアクセスできますか? – Sam

+0

@サマンサ私が投稿したリンクを読む。 ThreeTenABPを使用する方法とシリアル化する方法の1つ。また、[Wikipedia](https://en.wikipedia.org/wiki/Serialization)&[Oracle Tutorial](https://docs.oracle.com/javase/tutorial/jndi/objects/serial.html)。 –

+0

ああ、ありがとうThreeTenABPはThreeTen-Extraと同じですか?私はそれがアンドロイドでジョーダの時間を使用するのと基本的に同じであることを読んだ。 https://peirr.com/jodatime-vs-threetenabp-android-datetime-tool-comparison/ – Sam

関連する問題