2017-02-26 8 views
0

は現在、私は読み取りおよび書き込みfutureMeetingArrayとpastMeetingArrayをし、後でgetMeetingListOn方法でそれらを呼び出すしようとしています。このメソッドは、同じ日付のミーティングを見つけて配列に追加し、その配列を返す必要があります。しかし、現時点ではこれを見つけることはできません(これまでのところ、私は未来のミーティング・アレイでしかテストしていません)。また、addFutureMeetingメソッドを追加して、futureArrayListを追加してからシリアライズする方法を説明しました。それぞれのFutureMeetingオブジェクトには、グローバルなカレンダ変数があります。これはゲッターとセッターを介して呼び出しています。それを明確にするなら、私はこのコードを提供することができます。シリアライズの問題

誰もが、それは日付を見つけていない理由を示唆することができれば、私は感謝されます。

public class ContactManagerImpl implements ContactManager { 
    Calendar date; 
    List<Meeting> futureMeetingArray = new ArrayList<Meeting>(); 
    List<PastMeetingImpl> pastMeetingArray = new ArrayList<PastMeetingImpl>(); 
    List<Contact> allContacts = new ArrayList<Contact>(); 

    @Override 
    public int addFutureMeeting(Set<Contact> contacts, Calendar date) { 
     readSerializedData(); 
     int ID = (int)(Math.random()*500 + 1000); 
     FutureMeetingImpl fm = new FutureMeetingImpl(contacts, ID, date); 
     futureMeetingArray.add(fm); 
     makeNewFolder(); 
     try { 
      FileOutputStream fileOut = new FileOutputStream("./serialized/newfuturemeeting1.out"); 
      ObjectOutputStream out = new ObjectOutputStream(fileOut); 
      out.writeObject(futureMeetingArray); //This is so I can use later methods down where you need to get specific meetings in list form 
      out.close(); 
      fileOut.close(); 
     }catch(IOException i) { 
      i.printStackTrace(); 
     } 
      contactAdder(contacts); 
     return ID; 
    } 

    @Override 
    public List<Meeting> getMeetingListOn(Calendar date) { 
     readSerializedData(); 
     SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd"); 
     String formatted = format1.format(date.getTime()); 
     List<Meeting> meetings = new ArrayList<Meeting>(); 
     Meeting currentMeeting = futureMeetingArray.get(0); 
     if(futureMeetingArray.size() > 0){ 
      for(int x = 0; x < futureMeetingArray.size(); x++){ 
       currentMeeting = futureMeetingArray.get(x); 
       Calendar currentMeetingsDate = currentMeeting.getDate(); 
       System.out.println("s"); 
       if(currentMeetingsDate == date){ 
        System.out.println("Adding future"); 
        meetings.add(currentMeeting); 
       } 
      } 
     } 

      for (int p = 0; p < pastMeetingArray.size(); p++){ 
       Meeting currentMeetingPast = new PastMeetingImpl(); 
       SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd"); 
       String formatted3 = format3.format(currentMeetingPast.getDate()); 
       System.out.println(formatted3); 
       if(formatted3 == formatted){ 
        System.out.println("Adding future"); 
        meetings.add(currentMeetingPast); 
       } 
      } 
     for(int y = 0; y < meetings.size(); y++){ 
      Meeting meetingPrint = meetings.get(y); 
      System.out.println("Your list of meetings include meeting IDs: " + meetingPrint.getId()); 
     } 
     return meetings; 
    } 
} 

+0

これは、直列化の問題ではないかもしれない - 私は正しくCalendarクラスを使用するために失敗することができます。もし誰かがこれを使うことに関する情報があれば、私はそれを感謝します – BitLord

答えて

0

私はあなたがここに持っているものを「シリアライズ」の問題を確認していません。しかし、私はあなたがオブジェクトを比較するために "=="を使っているのを見ています。 .equalsを使用するか、コンパレータを使用してください。

は、あなたが「==」を使用するべきでない理由については、この記事を参照してください。 Compare two objects with .equals() and == operator

+0

ありがとう、私はこれを修正します。しかし、私はまだfutureMeetingArrayの周りをループして何も追加しないで、同じ結果を得ます。私が使用しているテストは、このです: '@Test \t公共ボイドtestgetMeetingListOn(){ \t \tするSystem.out.println(+ this.date "DATEを印刷します")。 \t \t cm.getMeetingListOn(this.date)。 \t} ' – BitLord

+0

日付を追加するときに同じ日付の書式、タイムゾーンとロケールを使用しています(んが、addFutureMeeting()に渡すカレンダーのインスタンスは、日付、あなたが反対比較している?と同じ形式、タイムゾーンとロケールである)あなたの場合".equals"を使用して比較すると、比較する日付はミリ秒を含めて同じでなければなりません。比較にタイムスタンプを含めたくない場合は、年月日を別々に比較してください。 – BadeMan

関連する問題