Ich möchte Informationen von einer API zu einem Fragment
laden.Wie kann ich getSupportLoaderManager() in Fragmenten verwenden?
Ich benutze getSupportLoaderManager()
aber ein Fehler auftritt:
Die Methode kann nicht lösen: getSupportLoaderManager()
ich für diesen Zweck zu suchen onActivityCreated()
aber ich habe NullPointerException
.
Können Sie mir helfen, das Problem zu lösen?
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();
}
}
}
Was meinen Sie mit "Ich suche über diese Verwendung aufActivityCreated"? Ich kann keinen Code für 'onActivityCreated()' sehen, daher verstehe ich diesen Teil Ihrer Frage nicht. – 0X0nosugar
Ich meine, ich suchte nach dem Problem Ich habe gefunden, dass ich die onActivityCreated() überschreiben muss und in dieser Methode sollte ich getLoaderManager() schreiben. InitLoader (0, null, getContext()). ForceLoad(); Ich schrieb das, aber ich habe Null-Zeiger-Ausnahme. – ShahidaTalib
In Ordnung. Wenn Sie herausfinden möchten, warum Sie eine NPE erhalten haben, müssen Sie die Fehlermeldung von Logcat teilen. Dann kann man vielleicht sehen, was genau Null war. – 0X0nosugar