2016-08-08 18 views
1

Okay, ich gebe auf. Ich kann es nicht herausfinden.LoaderManager akzeptiert 'das' nicht

Ich verfolge einen Udacity-Kurs zu Android-Grundlagen und muss herausfinden, wie man Daten mit einem Loader lädt. Allerdings, wenn ich die folgende Zeile verwenden, die ‚this‘ ist rot und zeigen die folgenden Fehler hervorgehoben:

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

Ich habe gegoogelt, gestapelt und versuchten Vorschlag, den ich gefunden habe. Ich habe versucht, eine innere Klasse zu erstellen, die die Rückrufe implementiert. Ich habe eine Brickwall geschlagen und ich sitze hier und kratze mich am Kopf, um herauszufinden, was ich vermisse!

Kann mir jemand sagen, was ich hier falsch mache?

Vielen Dank im Voraus!

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

Sie bitte Ihre Frage bearbeiten und Ihre 'dataLoader' Klassendefinition bereitstellen. – CommonsWare

Antwort

1

Diese Methode erwartet LoaderCallbacks als Argument.

Ihre Aktivität muss die LoaderCallbacks interface implementieren. OR Sie bieten eine anonyme Implementierung dieser Schnittstelle wie:

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

Umsetzung der Interface-Methoden ist aber, Sie, wird dieser Code nicht sofort funktionieren.

+0

Hallo Ascorbin. Ich habe das obige versucht, aber das Callback-Argument in der letzten Zeile ist hervorgehoben und zeigt den gleichen Fehler ??? – Caphson

+0

@Capsphon Sie müssen genauer angeben, was der Fehler ist. Beachten Sie, dass es verschiedene Versionen der meisten Loader-Sachen gibt (normal und v4), überprüfen Sie Ihre Importe, wenn etwas durcheinander ist. – FWeigl

5

Änderung:getLoaderManager() zu getSupportLoaderManager();
So:
getLoaderManager().initLoader(ID_FAVORITE_METAINFO_LOADER, args, this);
Um
getSupportLoaderManager().initLoader(ID_FAVORITE_METAINFO_LOADER, args, this);

+0

Danke, ich mache den gleichen Kurs wie das OP. Das Ändern von 'getLoaderManager' in' getSupportLoaderManager' hat mein Problem gelöst. – jungledev

Verwandte Themen