gpt4 book ai didi

java - 什么调用loadInBackground方法,如何检索带有数据的列表

转载 作者:行者123 更新时间:2023-12-01 09:01:52 25 4
gpt4 key购买 nike

我已从其中一个免费 API 获取数据。数据保存在arrayList中。我使用 AsyncTaskLoader 来获取其他线程上的数据。一切都很顺利,但我不知道如何使用 MainActivity 类上的数据检索 arrayList 。

MainActivity.java:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate: START");

setContentView(R.layout.activity_main);


ConnectivityManager connMgr = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();

if (networkInfo != null && networkInfo.isConnected()) {
LoaderManager loaderManager = getLoaderManager();
loaderManager.initLoader(EARTHQUAKE_LOADER_ID, null, this);

} else {

}

Log.i(TAG, "onCreate: END");

}


@Override
public Loader<List<News>> onCreateLoader(int id, Bundle args) {
Log.i(TAG, "onCreateLoader: START");

NewsLoader newsloader = new NewsLoader(this,URL);
List<News> list = newsloader.getList();
Log.i(TAG, "onCreateLoader: list: " + list);

Log.i(TAG, "onCreateLoader: END");

return newsloader;
}

NewsLoader.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;
}

}

我也有 News 和 QueryUtils 类,但在这些类中一切都很顺利,问题是如何从 MainActivity 类访问列表。

当我在类声明下声明 List 外部方法并创建列表 getter 时以及当我尝试从 MainActivity 获取列表时:

    NewsLoader newsloader = new NewsLoader(this,URL);
List<News> list = newsloader.getList();
Log.i(TAG, "onCreateLoader: list: " + list);

然后列表为空,尽管在其他类(NewsLoader)中数据在调用“getList”之前已分配给列表。

或者只是简单的问题就可以解决问题:NewsLoader.java 中的 loadInBackground 列表返回到哪里?

最佳答案

经过一些测试,我得出这个结论:如果 Loader 已经存在,则此行 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
}

关于java - 什么调用loadInBackground方法,如何检索带有数据的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com