여기에 자신의 값을 변경 내 클래스의 :ArrayList의 모든 요소가 예기치 않게
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;
}
}
}
구문 분석 코드가 잘 작동하는지 나는 확신 (자바 프로젝트에서 테스트가).
마지막으로 arr
의 모든 요소가 동일하게됩니다 (모두 갑자기 arr
에 삽입 된 첫 번째 요소와 동일하게됩니다). 디버깅을하고 각 요소가 다른 요소와 다르다는 것을 알았습니다.
info
개체가 다를 때마다, 이는 arr
에 다른 요소를 추가 함을 의미합니다. arr.add(info);
. while
루프 디버깅은 모든 것이 정상이지만, AsyncTask
을 종료하자마자 arr
은 동일한 객체가 여러 개있는 ArrayList가됩니다.
어떻게 해결할 수 있습니까? 내가 도대체 뭘 잘못하고있는 겁니까?