RecyclerViewのデータをウェブサイトから廃棄することを試みています。問題はgetData()
メソッドのSearchCards.java
(モデル)の前に文字列(pageTitle)を返します。AsyncTaskが実行され、空のStringが返されます。ここに私のコードはScrapping.javaがAsyncTaskのonPostExecute()が実行された後に値を返す方法は?
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;
}
FragmentOne.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
}
}
Scrapping.javaのreturn pageTitleのような操作は、AsyncTaskの実行が完了した後にのみ実行されます。私はこれを試みたが、うまくいきませんでした:
if(jsoupAsyncTask.getStatus() == AsyncTask.Status.FINISHED){
return pageTitle;
}
EDIT: が、これはよく研究問題ではなかったかもしれませ。ここで私が探していたものが見つかりました:http://stacktips.com/tutorials/android/android-recyclerview-example 私がしなければならなかったのは、onPostExecute()でSearchAdapterの初期化を移動することでした。
'保護された無効onPostExecute(ボイド結果){// がsomething'を行います。だけでなく、何か。しかし、たとえば、変更されたgetData()を呼び出してリストビューを設定します。それは普通の方法です。あなたのデザインに適応してください。あなたが今持っているものは、まったく行く方法ではありません。 – greenapps
可能性のある複製http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is-a –
入力いただきありがとうございます。アンドロイドに新しいし、適応しようとしています。ここでの答えは、私が進めるためにいくらか明確にしましたが。 – mustafa1993