我想将信息从 API 加载到 Fragment
。
我使用 getSupportLoaderManager()
但出现错误:
Cannot resolve method: getSupportLoaderManager()
我搜索这个使用 onActivityCreated()
但我有 NullPointerException
。
你能帮我解决这个问题吗?
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
public class Business extends Fragment implements LoaderManager.LoaderCallbacks<String> {
ListView listView;
public Business() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_business, container, false);
listView = view.findViewById(R.id.list_item);
getSupportLoaderManager().initLoader(0, null, getContext()).forceLoad();
return view;
}
@Override
public Loader<String> onCreateLoader(int id, Bundle args) {
return null;
}
@Override
public void onLoadFinished(Loader<String> loader, String data) {
if (data != null && !data.isEmpty())
updateUI(data);
else
Toast.makeText(getContext(), "no internet", Toast.LENGTH_SHORT).show();
}
@Override
public void onLoaderReset(Loader<String> loader) {
}
private void updateUI(String data) {
try {
final ArrayList<ResultOfArtBusiness> results = new ArrayList<>();
JSONObject root = new JSONObject(data);
JSONObject secondObject = root.getJSONObject("response");
JSONArray firstArray = secondObject.getJSONArray("results");
for (int i = 0; i < firstArray.length(); i++) {
JSONObject objectInArray = firstArray.getJSONObject(i);
String webPublicationDate;
if (objectInArray.has("webPublicationDate"))
webPublicationDate = objectInArray.getString("webPublicationDate");
else webPublicationDate = null;
String webTitle;
if (objectInArray.has("webTitle"))
webTitle = objectInArray.getString("webTitle");
else webTitle = null;
String webUrl;
if (objectInArray.has("webUrl"))
webUrl = objectInArray.getString("webUrl");
else webUrl = null;
ResultOfArtBusiness resultOfArticle = new ResultOfArtBusiness(webTitle, webPublicationDate, webUrl);
results.add(resultOfArticle);
}
NewsAdapterBusiness adapter = new NewsAdapterBusiness(getContext(), R.layout.item_design, results);
listView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
最佳答案
更新:2019 年 9 月 2 日
Fragment
中的 getLoaderManager()
已弃用。
使用
// LoaderManager#getInstance(LifecycleOwner)
LoaderManager.getInstance(this) // this points to the Fragment
旧答案
事情是我们在从 Activity 调用时使用 getLoaderManager()
或 getSupportLoaderManager()
但当涉及到 fragment 时,您可以直接调用 getLoaderManager()
无需调用 getSupportLoaderManager()
,它会在后台根据所使用的 fragment 调用相应版本的方法。
关于java - 如何在 fragment 中使用 getSupportLoaderManager()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930662/