什么调用loadInBackground方法,如何用数据检索列表

时间:2017-01-12 02:07:42

标签: java android

我从其中一个免费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列表返回的位置?

1 个答案:

答案 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
}