【问题标题】:How can I use getSupportLoaderManager() in Fragments?如何在 Fragments 中使用 getSupportLoaderManager()?
【发布时间】:2017-12-21 18:24:05
【问题描述】:

我想将信息从 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();
        }
    }
}

【问题讨论】:

  • “我搜索一下这个使用 onActivityCreated”是什么意思?我看不到onActivityCreated() 的任何代码,所以我不明白你的这部分问题。
  • 我的意思是我搜索了我发现我必须覆盖 onActivityCreated() 的问题,在该方法中我应该编写 getLoaderManager().initLoader(0, null, getContext()).forceLoad ();我写了,但我有空指针异常。
  • 好的。如果你想知道为什么你得到了 NPE,你必须分享来自 Logcat 的错误消息。然后也许可以看到究竟是什么是空的。
  • java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.support.v4.content.Loader.forceLoad()”
  • 在 com.example.hp.newnewsapp.Fragment.Business.onActivityCreated(Business.java:44)

标签: java android android-fragments android-loadermanager


【解决方案1】:

更新: 2019 年 9 月 2 日

Fragment 中的getLoaderManager() 已弃用。

使用

// LoaderManager#getInstance(LifecycleOwner) 
LoaderManager.getInstance(this) // this points to the Fragment

旧答案

问题是我们在activity调用时使用getLoaderManager()getSupportLoaderManager(),但是当涉及到fragment时你可以直接调用getLoaderManager()不需要调用getSupportLoaderManager()并且在后面场景中,它将根据所使用的片段调用其各自版本的方法。

【讨论】:

  • 我有错误,错误是无法解析方法getLoaderFragment。
  • 正如我所提到的,我们可以调用 getLoaderManager,它适用于两种片段类型,现在它对我有用,现在很难说为什么它没有为你解决。
  • 支持片段没有getSupportLoaderManager()这样的方法。
  • 我改为 getLoaderManager() 但我有异常,这是异常。 java.lang.NullPointerException:尝试在 com.example.hp.newnewsapp.Fragment.Business.onCreateView(Business.java) 的空对象引用上调用虚拟方法“void android.support.v4.content.Loader.forceLoad()” :49)
  • 我正在使用 LoaderManager.getInstance(this).initLoader(URL_LOADER, null, this);在片段类中但我有相同的空指针异常任何解决方案?
猜你喜欢
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2017-08-10
相关资源
最近更新 更多