2017-05-05 2 views
2

私はFileRelationshipというクラスがあり、これに大きな問題があります。クラスは以下の通りです。私はこのクラスのequalsメソッドもオーバーライドしました。今Android SearchオブジェクトのArrayListの1つだけ、オブジェクトのインデックスを返す

public class FileRelationship { 
String fileName; 
String firstLink; 
String secondLink; 
String thirdLink; 

public FileRelationship(String fileName) { 
    this.fileName = fileName; 
} 

public FileRelationship(String fileName, String firstLink, String secondLink, String thirdLink) { 
    this.fileName = fileName; 
    this.firstLink = firstLink; 
    this.secondLink = secondLink; 
    this.thirdLink = thirdLink; 
} 

public boolean equals(Object o) { 
    if(o == null) { 
     return false; 
    } 

    if(this == o) { 
     return true; 
    } 

    if(o instanceof FileRelationship) { 
     return this.fileName.equals(((FileRelationship)o).fileName); 
    } 

    return false; 
} 

}

私はFileRelationshipsのArrayListのを持っていると私はこれらのすべては、それ(に4つの文字列を持つコンストラクタを使用します(このリストを検索することができるようにしたいファイル名、firstLink、secondLink、thirdLink) )今、私はこの配列リストを検索するはずの別のクラスにメソッドを持っていて、これは一致するfileNameを持つもののインデックスを見つける。このメソッドを呼び出すと、fileNameでコンストラクタに渡すだけです。それだけです。 (これは私がそれを行うことができる唯一のものです、私は他の文字列を知らないでしょう)。

これは、FileRelationshipsのArrayListを設定する方法です。

 fileRelationships = new ArrayList<FileRelationship>(); 

    String MasterLine; 

    InputStream inputStream = this.getResources().openRawResource(R.raw.masterfile); 

    InputStreamReader inputreader = new InputStreamReader(inputStream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 

    // Creates the arrayList of all the relationships for later use of retreival. 
    try { 
     while ((MasterLine = buffreader.readLine()) != null) { 
      MasterLineArray = MasterLine.split(","); 
      String filename = MasterLineArray[0]; 
      String choice1 = MasterLineArray[1]; 
      String choice2 = MasterLineArray[2]; 
      String choice3 = MasterLineArray[3]; 
      FileRelationship fr = new FileRelationship(filename, choice1, choice2, choice3); 

      fileRelationships.add(fr); 
     } 
    } catch (IOException e) { 

    } finally { 
     closeQuietly(buffreader); 
} 

これは、関係を見つけて必要な変数に設定するための私の方法です。私は、リストのインデックスを見つけてそれを変数に適用できるようにしたい。

 public void findRelationship(String nextFileName) { 
     int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName))); 
     selectedRelationship = fileRelationships.get(pageIndex); 
     currentPage = pageIndex; 
    } 

EDIT:何が間違っているのか忘れてしまった。いいえ、それは動作しません。 pageIndexは-1を返しています(つまり、何も見つかりません)。私は他に何をするべきかわからない、多分HashCodeを使うかもしれないが正直言って私はそれについても調べているし、それを使う方法も分からない。

これはすぐに学校のプロジェクトのため、これは本当に本当に助けが必要です。私はこのプロジェクトのほとんどをやったことがあります。一度完成すれば、ほとんど完了するはずです。ありがとう。この

public void findRelationship(String nextFileName) { 

for(FileRelationship file:fileRelationships) 
{ 
    if(file.firsFileName.equals(nextFileName)) 
    { 
    currentPage=fileRelationships.indexOf(file); 
    } 
} 

} 

リストのような

+1

このコードの問題は何ですか?それは動作しませんか? – Eran

+0

私はあなたがリストを検索するためにIteratorを使うべきか、まったく変更したくない場合はforeachループを使うべきだと思います。あなたの場合、pageIndexの値は-1だと思います。私は正しい? – FaisalAhmed

+0

私はFileRelationship(String、String、String String)とFileRelationship(String)を比較しようとしていたので、私はそうしなければならないと考えました。はい、私のpageIndexは-1であり、それが問題です。それはインデックスを返すのに役立つでしょうか? –

答えて

2

検索は-1を返し、リストは、そのオブジェクトが含まれていないとき。あなたのケースでは、これは正しい方法ではない、新しいオブジェクトに

int pageIndex = fileRelationships.indexOf((new FileRelationship(nextFileName))); 

を作成することにより、OBJのindexOf()を使用しています。あなたは新しいオブジェクトとリストを作成しているので、新しいオブジェクトに

が含まれており、また、直接、各フィールドへのアクセスFileRelationshipクラスの各フィールドのgetter setterメソッドを作成しません良い方法ではありません

関連する問題