首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncTaskLoader未启动

AsyncTaskLoader未启动
EN

Stack Overflow用户
提问于 2015-12-05 14:46:00
回答 2查看 493关注 0票数 1

我在装载机上有一些问题,但我不知道我做错了什么。这是一个片段,可以插入并启动装载机

代码语言:javascript
复制
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.pixelark.bulletinplus.R;
import com.pixelark.bulletinplus.async.ChurchListLoader;
import com.pixelark.bulletinplus.debug.Debug;
import com.pixelark.bulletinplus.model.ChurchListItem;

import java.util.ArrayList;

    public class ChurchListFragment extends android.support.v4.app.Fragment
            implements LoaderManager.LoaderCallbacks<ArrayList<ChurchListItem>> {

    private static final int CHURCH_LIST_LOADER_ID = 777;

    public ChurchListFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_church_list, container, false);
        Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        toolbar.setTitle("ChurchListFragment");
        getLoaderManager().initLoader(CHURCH_LIST_LOADER_ID, null, this);
        return rootView;
    }

    @Override
    public Loader<ArrayList<ChurchListItem>> onCreateLoader(int id, Bundle args) {
        Debug.d(Debug.LOADER_DEBUG_TAG, "onCreateLoader");
        return new ChurchListLoader(getContext());
    }

    @Override
    public void onLoadFinished(Loader<ArrayList<ChurchListItem>> loader, ArrayList<ChurchListItem> data) {
        Debug.d(Debug.LOADER_DEBUG_TAG, "onLoadFinished");
    }

    @Override
    public void onLoaderReset(Loader<ArrayList<ChurchListItem>> loader) {

    }
}

这是我编写的一个简单的加载程序:

代码语言:javascript
复制
import android.content.Context;
import android.util.Log;

import com.pixelark.bulletinplus.contract.UrlContract;
import com.pixelark.bulletinplus.debug.Debug;
import com.pixelark.bulletinplus.model.ChurchListItem;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

public class ChurchListLoader extends android.support.v4.content.AsyncTaskLoader<ArrayList<ChurchListItem>> {

    public ChurchListLoader(Context context) {
        super(context);
    }

    @Override
    public ArrayList<ChurchListItem> loadInBackground() {
        Debug.d(Debug.LOADER_DEBUG_TAG, "loadInBackground");
        try {
            URL url = new URL(UrlContract.URL_BASE + UrlContract.URL_BASE);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");

            String responseMessage = connection.getResponseMessage();
            InputStreamReader inputStreamReader = new InputStreamReader(connection.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                Log.d(Debug.LOADER_DEBUG_TAG, "Line: " + line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

把注意力集中在日志上。

日志输出: D/LOADER_DEBUG_TAG: onCreateLoader

这都是日志输出,我不明白为什么Loader不启动方法loadInBackground();

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-05 15:09:03

当我发现AsyncTaskLoader并没有像AsyncTask那样自动启动时,我感到有点惊讶。

下面是一个onStartLoading()覆盖的最小示例,它将使您运行:

代码语言:javascript
复制
   @Override
   protected void onStartLoading() {
       forceLoad();
   }

您可能需要根据需要向此方法添加一些逻辑。这将总是尝试获得一个新的数据集。如果您已经加载了数据,而且数据没有更改,您可以立即调用deliverResult()

看看JavaDocs for AsyncTaskLoader,可以看到onStartLoading()的一个示例实现。

票数 5
EN

Stack Overflow用户

发布于 2015-12-05 15:11:02

Yout应该叫你自己。

代码语言:javascript
复制
   @Override
    public Loader<ArrayList<ChurchListItem>> onCreateLoader(int id, Bundle args) {
        Debug.d(Debug.LOADER_DEBUG_TAG, "onCreateLoader");
        return new ChurchListLoader(getContext()).startLoading();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34106787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档