我从其中一个免费API获取数据。数据保存在arrayList中。我使用AsyncTaskLoader来获取其他线程上的数据。一切进展顺利但我不知道如何使用MainActivity类中的数据检索arrayList。
MainActivity.java:
public class NewsLoader extends AsyncTaskLoader<List<News>> {
private static final String TAG = "NewsLoader";
public List<News> listOfNews;
private String mUrl;
public NewsLoader(Context context, String url) {
super(context);
mUrl=url;
}
@Override
protected void onStartLoading() {
forceLoad();
}
@Override
public List<News> loadInBackground() {
Log.i(TAG, "loadInBackground: START");
if(mUrl == null){
return null;
}
listOfNews = QueryUtils.fetchDataFromPage(mUrl);
Log.i(TAG, "loadInBackground: END");
return listOfNews;
}
public List<News> getList(){
return listOfNews;
}
NewsLoader.java:
NewsLoader newsloader = new NewsLoader(this,URL);
List<News> list = newsloader.getList();
Log.i(TAG, "onCreateLoader: list: " + list);
}
我也有News和QueryUtils类,但在这些类中一切顺利,问题是如何从MainActivity类访问列表。
当我声明List外部方法时,在类声明和创建列表getter之下,当我尝试从MainActivity获取列表时:
{{1}}
然后list为null,尽管在调用“getList”之前将其他类(NewsLoader)数据分配给list。
或者只是简单的问题就可以解决问题: 来自NewsLoader.java的loadInBackground列表返回的位置?
答案 0 :(得分:1)
经过一些测试后,我得出了这样的结论:
如果已存在加载器,则此行loaderManager.initLoader(EARTHQUAKE_LOADER_ID, null, this);
将跳转到您不具备的以下方法onLoadFinished(Loader<List<News>> loader, List<News> data)
。因此,在MainActivity中覆盖该方法。
像这样:
//declare your arraylist here
protected void onCreate(Bundle savedInstanceState){...}
@Override
public Loader<List<News>> onCreateLoader(int id, Bundle args) {...}
@Override
onLoadFinished(Loader<List<News>> loader, List<News> data){
//assign data to your arraylist
}