java - 如何在 fragment 中使用 getSupportLoaderManager()?

标签 java android android-fragments android-loadermanager

我想将信息从 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/

相关文章:

java - 服务层中的Spring @Validated

android - 在 fragment 之间传递对象

java - Android:使用带有动态 url 的 Retrofit

java - 通过 intellij hibernate 持久化工具生成模型时关系引用禁用表

java - 创建 Android Wifi 聊天应用程序

android - 在 Android ConstraintLayout 中创建具有可变数量 n 的网格 (n × n)

android - GridView 崩溃

android - 一个按钮的多个onClickListener

java - 如何从 Fragment 类中的 URL 加载图像?

java - Netbeans 中未显示输出框