Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTaskLoader未启动_Java_Android_Android Asynctask_Loader - Fatal编程技术网

Java AsyncTaskLoader未启动

Java AsyncTaskLoader未启动,java,android,android-asynctask,loader,Java,Android,Android Asynctask,Loader,我在装载机方面有些问题,但我不明白我做错了什么。 这是初始化和启动加载程序的片段 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.vie

我在装载机方面有些问题,但我不明白我做错了什么。 这是初始化和启动加载程序的片段

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) {

    }
}
导入android.os.Bundle;
导入android.support.v4.app.LoaderManager;
导入android.support.v4.content.Loader;
导入android.support.v7.widget.Toolbar;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入com.pixelark.bulletinplus.R;
导入com.pixelark.bulletinplus.async.ChurchListLoader;
导入com.pixelark.bulletinplus.debug.debug;
导入com.pixelark.bulletinplus.model.ChurchListItem;
导入java.util.ArrayList;
公共类ListFragment扩展了android.support.v4.app.Fragment
实现LoaderManager.LoaderCallbacks{
私有静态最终int CHURCH\u LIST\u LOADER\u ID=777;
公共教会{
//必需的空公共构造函数
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u church\u列表,容器,false);
Toolbar Toolbar=(Toolbar)getActivity().findViewById(R.id.Toolbar);
toolbar.setTitle(“ChurchListFragment”);
getLoaderManager().initLoader(CHURCH_LIST_LOADER_ID,null,this);
返回rootView;
}
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
Debug.d(Debug.LOADER_Debug_标记,“onCreateLoader”);
返回新的列表加载器(getContext());
}
@凌驾
public void onLoadFinished(加载程序、ArrayList数据){
Debug.d(Debug.LOADER_Debug_标记,“onLoadFinished”);
}
@凌驾
公共void onLoaderReset(加载器){
}
}
这是我编写的一个简单加载程序:

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;
    }
}
导入android.content.Context;
导入android.util.Log;
导入com.pixelark.bulletinplus.contract.urlcract;
导入com.pixelark.bulletinplus.debug.debug;
导入com.pixelark.bulletinplus.model.ChurchListItem;
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
公共类ListLoader扩展了android.support.v4.content.AsyncTaskLoader{
公共列表加载器(上下文){
超级(上下文);
}
@凌驾
公共阵列列表loadInBackground(){
Debug.d(Debug.LOADER_Debug_标记,“loadInBackground”);
试一试{
URL=新URL(UrlContract.URL\u BASE+UrlContract.URL\u BASE);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setRequestMethod(“GET”);
字符串responseMessage=connection.getResponseMessage();
InputStreamReader InputStreamReader=新的InputStreamReader(connection.getInputStream());
BufferedReader BufferedReader=新的BufferedReader(inputStreamReader);
弦线;
而((line=bufferedReader.readLine())!=null){
Log.d(Debug.LOADER_Debug_标记,“行:”+行);
}
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
}
注意日志

日志输出: D/LOADER\u DEBUG\u标记:onCreateLoader

这就是所有的日志输出,我不明白为什么Loader不启动loadInBackground()方法


谢谢。

我有点惊讶地发现
AsyncTaskLoader
并没有像
AsyncTask
那样自动启动

下面是一个覆盖
onStartLoading()
的最小示例,它将帮助您继续:

   @Override
   protected void onStartLoading() {
       forceLoad();
   }
根据需要,您可能需要为此方法添加一些逻辑。这将始终尝试获取新的数据集。如果已经加载了数据,但数据没有更改,则可以立即调用
deliverResult()


查看
AsyncTaskLoader
的JavaDocs,查看
onStartLoading()

的一个示例实现,我有点惊讶地发现
AsyncTaskLoader
并没有像
AsyncTask
那样自动启动

下面是一个覆盖
onStartLoading()
的最小示例,它将帮助您继续:

   @Override
   protected void onStartLoading() {
       forceLoad();
   }
根据需要,您可能需要为此方法添加一些逻辑。这将始终尝试获取新的数据集。如果已经加载了数据,但数据没有更改,则可以立即调用
deliverResult()


查看JavaDocs for
AsyncTaskLoader
,以查看
onStartLoading()

的示例实现,您应该将其称为youself

   @Override
    public Loader<ArrayList<ChurchListItem>> onCreateLoader(int id, Bundle args) {
        Debug.d(Debug.LOADER_DEBUG_TAG, "onCreateLoader");
        return new ChurchListLoader(getContext()).startLoading();
    }
@覆盖
公共加载器onCreateLoader(int-id,Bundle-args){
Debug.d(Debug.LOADER_Debug_标记,“onCreateLoader”);
返回新的ChurchListLoader(getContext()).startLoading();
}

你应该称之为你自己

   @Override
    public Loader<ArrayList<ChurchListItem>> onCreateLoader(int id, Bundle args) {
        Debug.d(Debug.LOADER_DEBUG_TAG, "onCreateLoader");
        return new ChurchListLoader(getContext()).startLoading();
    }
@覆盖
公共加载器onCreateLoader(int-id,Bundle-args){
Debug.d(Debug.LOADER_Debug_标记,“onCreateLoader”);
返回新的ChurchListLoader(getContext()).startLoading();
}

切勿直接调用
loadInBackground()
。这将使任务在UI线程上执行,而不是在后台线程上执行。也许你应该使用startLoading(),因为它不能完成任务!切勿直接调用
loadInBackground()
。这将使任务在UI线程上执行,而不是在后台线程上执行。也许你应该使用startLoading(),因为它不能完成任务!尝试在29/7,工作希望谷歌将罚款这一问题在29/7,工作希望谷歌将罚款这一问题