AsyncLoader - 不接受'this'

时间:2016-08-10 19:05:49

标签: java android android-loadermanager

这是我问here的问题的后续跟进。

我已经从this tutoria升复制并粘贴了这段代码。当我将其粘贴到Android Studio中时,content.getLoadManager.initLoader()的'this'参数以红色突出显示,并显示以下错误:

错误的第三个参数类型。找到'com.example.carl.loaderDemo.FooLoaderClient',需要:'android.app.LoaderManager.LoaderCallBacks

我之前碰到过这个(见第一个链接)。我希望这个教程有所帮助,但我似乎只是在无休止的圈子里去了!

有人能指出我正确的方向吗?!

package com.example.carl.loaderdemo;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;

public class FooLoader extends AsyncTaskLoader {
    public FooLoader(Context context, Bundle args) {
        super(context);
        // do some initializations here
    }
    public String loadInBackground() {
        String result = "";
        // ...
        // do long running tasks here
        // ...
        return result;
    }
}

class FooLoaderClient implements LoaderManager.LoaderCallbacks {
    Activity context;
    // to be used for support library:
    // FragmentActivity context2;
    public Loader onCreateLoader(int id, Bundle args) {
        // init loader depending on id
        return new FooLoader(context, args);
    }

    @Override
    public void onLoadFinished(Loader loader, Object data) {

    }

    public void onLoaderReset(Loader loader) {
        // ...
    }
    public void useLoader() {
        Bundle args = new Bundle();
        // ...
        // fill in args
        // ...
        Loader loader =
                context.getLoaderManager().initLoader(0, args, this);
        // with support library:
        // Loader loader =
        //    context2.getSupportLoaderManager().initLoader(0, args, this);
        // call forceLoad() to start processing
        loader.forceLoad();
    }
}

错误消息的屏幕截图:

enter image description here

2 个答案:

答案 0 :(得分:2)

您的导入不匹配:

import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;

但你需要

import android.app.LoaderManager;
import android.content.AsyncTaskLoader;
import android.content.Loader;

您不能将支持库与Android框架混合使用。或者,您可以继承FragmentActivity并改为调用getSupportLoaderManager()

答案 1 :(得分:1)

您正在实施android.support.v4.app.LoaderManager.LoaderCallbacks,但客户期待android.app.LoaderManager.LoaderCallbacks。您需要在使用哪个加载器API时保持一致。