2016-08-08 141 views
1

好吧,我投降了。我想不明白。LoaderManager不接受'this'

我正在关注Android基础知识的Udacity课程,需要弄清楚如何使用Loader加载数据。然而,当我使用下面的行中,“这个”被以红色突出显示,并显示以下错误:

Wrong 3rd argument type. Found 'com.example.carl.latestnews.MainActivity', required: 'android.app.LoaderManager.LoaderCallbacks<java.lang.Object> 

我GOOGLE了,堆叠并试图建议,我已经找到。我试过创建一个实现回调的内部类。我碰到了一个砖墙,我坐在这里挠挠头,试图找出我失踪的东西!

任何人都可以告诉我我在做什么错吗?

在此先感谢!

package com.example.carl.latestnews; 


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; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.ListView; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<ArrayList<ArticleObject>> { 

    // ArticleObject is a custom object which contains a headline, date, category etc of a news article 

    // URL for Guardian API including API Key 
    final static String GUARDIAN_API_URL = "https://content.guardianapis.com/search?"; 

    // API Key 
    final static String GUARDIAN_API_KEY = "test"; 

    // ID for LoaderManager 
    final static int LOADER_MANAGER_ID = 0; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Get or initialize loader manager 
     getLoaderManager().initLoader(LOADER_MANAGER_ID, null, this); 

    } 

    @Override 
    public Loader<ArrayList<ArticleObject>> onCreateLoader(int id, Bundle args) { 
     return new dataLoader(); // dataLoader() removed for easy reading 
    } 

    @Override 
    public void onLoadFinished(Loader<ArrayList<ArticleObject>> loader, ArrayList<ArticleObject> data) { 
     /UI Update Code 
    } 

    @Override 
    public void onLoaderReset(Loader<ArrayList<ArticleObject>> loader) { 
     // Reset Code 
    } 




} 
+0

请编辑您的问题,并提供你的'dataLoader'类定义。 – CommonsWare

回答

1

该方法需要LoaderCallbacks作为参数。您的活动需要执行LoaderCallbacks interface。 OR 您提供一个匿名实现该接口像:

LoaderManager.LoaderCallbacks callbacks = new LoaderManager.LoaderCallbacks() { 
     @Override 
     public Loader onCreateLoader(int id, Bundle args) { 
      return null; 
     } 

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

     } 

     @Override 
     public void onLoaderReset(Loader loader) { 

     } 

    getLoaderManager().initLoader(LOADER_MANAGER_ID, null, callback); 

的接口方法的实现是由你的是,这个代码将不能马上工作。

+0

嗨Ascorbin。我已经尝试了以上,但在最后一行中的回调参数突出显示并显示相同的错误? – Caphson

+0

@Caphson你需要更具体地了解错误是什么。请注意,大多数加载器的东西都有不同的版本(正常版本和v4版本),如果有混淆,请检查您的导入。 – FWeigl

5

更改:getLoaderManager()getSupportLoaderManager();
像这样:
getLoaderManager().initLoader(ID_FAVORITE_METAINFO_LOADER, args, this);

getSupportLoaderManager().initLoader(ID_FAVORITE_METAINFO_LOADER, args, this);

+0

谢谢,我和OP一样。将'getLoaderManager'更改为'getSupportLoaderManager'解决了我的问题。 – jungledev