これが私のクラスです:
public class JsoupParser
{
ArrayList<CompanyInfo> arr = new ArrayList<CompanyInfo>();
public static final String SITE = "http://www.example.com/";
public JsoupParser() {}
public ArrayList<CompanyInfo> parse(final String link)
throws InterruptedException, ExecutionException
{
new RealParser().execute(link).get();
return arr;
}
class RealParser extends AsyncTask<String, Void, Void>
{
@Override
protected Void doInBackground(String... params)
{
Document doc = null;
String link = params[0];
try
{
doc = Jsoup.connect(link).get();
}
catch (IOException e)
{
e.printStackTrace();
}
Elements a = doc.select("a.company_logo");
Elements img = a.select("img");
Iterator aIter = a.iterator();
int i = 0;
CompanyInfo info = new CompanyInfo();
while(aIter.hasNext())
{
aIter.next();
info.setCompanyName(a.get(i).attr("title"));
info.setCompanyListingLink(SITE+ a.get(i).attr("href"));
info.setCompanyLogoLink(SITE+ img.get(i).attr("src"));
arr.add(info);
++i;
}
return null;
}
}
}
確かに、解析コードは正常に機能します(Javaプロジェクトでテスト済み)。
問題は、arr
最後ののすべての要素が同じになることです(すべてが突然に挿入された最初の要素と等しくなりarr
ます)。デバッグしてみると、各要素が別の要素とは異なっていることがわかります。
オブジェクトが異なるたびにinfo
、つまり、これをarr
行うために異なる要素を追加しarr.add(info);
ます。ループ内でのデバッグはwhile
すべて問題ありませんが、を終了するとすぐに、AsyncTask
はarr
複数の同じオブジェクトを持つArrayListになります。
どうすればこれを解決できますか?私は何が間違っているのですか?