如何在Fragments中使用getSupportLoaderManager()?

问题描述 投票:2回答:1

我想将API中的信息加载到Fragment

我使用getSupportLoaderManager()但发生错误:

无法解析方法: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();
        }
    }
}
java android android-fragments android-loadermanager
1个回答
6
投票

问题是我们在从活动调用时使用getLoaderManager()getSupportLoaderManager()但是当它涉及片段时你可以直接调用getLoaderManager()而不需要调用getSupportLoaderManager()并且在幕后它将根据所使用的片段调用其各自的方法版本。

© www.soinside.com 2019 - 2024. All rights reserved.