这是我的课:
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 。
我该如何解决这个问题?我究竟做错了什么?