Am trying to populate RecyclerView by scrapping data from website. Problem is getData()
method of SearchCards.java
(model) returns String (pageTitle) before AsyncTask has completed execution resulting in empty String. Here is my code
FragmentOne.java
mAdapter = new SearchAdapter(SearchCards.getData(),this,recyclerView);
recyclerView.setAdapter(mAdapter);
SearchCards.java
public static ArrayList<SearchCards> getData() {
ArrayList<SearchCards> datatList = new ArrayList<SearchCards>();
String pageTitle = new Scrapping().scrapSubs(); //scrapSubs contains AsynTask
String[] yearArr = setYearArr();
for (int i = 0; i < yearArr.length; i++) {
SearchCards searchCard = new SearchCards();
searchCard.setYear(yearArr[i]);
searchCard.setTitle(pageTitle); //same pagetitle for every year
datatList.add(searchCard);
}
return dataList;
}
Scrapping.java
public String ScrapSubs(){
JsoupAsyncTask jsoupAsyncTask = new JsoupAsyncTask();
jsoupAsyncTask.execute();
return pageTitle;
}
private class JsoupAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
htmlDocument = Jsoup.connect(htmlPageUrl).get();
pageTitle = htmlDocument.title();
Log.i(TAG,"PAGETITLE"+pageTitle);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
//do something
}
}
How to do something like return pageTitle in Scrapping.java executes only after AsyncTask execution completes. I tried this but didn't work:
if(jsoupAsyncTask.getStatus() == AsyncTask.Status.FINISHED){
return pageTitle;
}
EDIT: May be this was not a well-researched question. Here I found what I was looking for: http://stacktips.com/tutorials/android/android-recyclerview-example All I had to do was move SearchAdapter initialisation in onPostExecute().