2012-10-24 10 views
5

Mam nadzieję, że proste pytanie na java, którego właśnie zapomniałem lub którego nigdy nie zrozumiałem. Gram z ładowarkami w systemie Android 4.0. Program działa tak jak był, ale teraz szukam "następnej" części. Chcę standardowego programu ładującego kursory i niestandardowego AsyncTaskLoader. Utknąłem na części 1, próbując przekonwertować cursorLoader na program ładujący i go zwrócić.Jak przesłać kursorLoader do programu ładującego <Object>

@Override 
    //public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    public Loader<Object> onCreateLoader(int id, Bundle args) { 

     if (id == LISTVIEWLOADER) { 
      String[] projection = { RunnerTable.COLUMN_ID, 
        RunnerTable.COLUMN_NAME }; 
      CursorLoader cursorLoader = new CursorLoader(getActivity(), 
        FanContentProvider.CONTENT_URI, projection, null, null, 
        null); 


      return cursorLoader; //HERE IS THE PROBLEM 
     } 
     return null; 
    } 

Niezgodność typu nie może zostać przekształcona z CursorLoader na Loader.

wierzę, może pracować z

public class MainFragment extends ListFragment implements 
     //LoaderManager.LoaderCallbacks<Cursor> 
     LoaderManager.LoaderCallbacks 

Ale nie podoba mi się ostrzeżenie:

LoaderManager.LoaderCallbacks to rodzaj surowego. Odniesienia do typowego typu LoaderManager.LoaderCallbacks należy sparametryzować:

Dziękujemy za udzielenie pomocy.

Odpowiedz

2

Zmień

public Loader<Object> onCreateLoader(int id, Bundle args) { 

do

public Loader<? extends Object> onCreateLoader(int id, Bundle args) { 

Pierwsze stwierdzenie mówi JVM, typ zwracany jest beton Object. Nowa instrukcja mówi jvm, że dowolny TYPE, który jest z Object.

Przeczytaj to tutorial.

+2

Obawiam się, że nadal nie działa. Typ zwracany jest niezgodny z LoaderManager.LoaderCallbacks .onCreateLoader (int, Bundle). – jimsis

7

Sprawdź importu, można mis korzystać z tych 2:

import android.content.CursorLoader; 

i

import android.support.v4.content.CursorLoader; 
+1

Witamy w Stackoverflow! Twoja odpowiedź byłaby o wiele bardziej pomocna, gdybyś zaznaczył, w jaki sposób import jest niewłaściwie używany. – mvp

-1

Wystarczy popatrzeć na to: Android AsyncTaskLoader Reference

wierzę Twój problem polega na tym wierszu :

public class MainFragment extends ListFragment implements 
    //LoaderManager.LoaderCallbacks<Cursor> 
    LoaderManager.LoaderCallbacks 

należy zmienić na coś takiego:

public static class AppListFragment extends ListFragment 
    implements LoaderManager.LoaderCallbacks<List<AppEntry>> 
29

Chociaż jest to stary wątek, to nie został jeszcze w pełni odpowiadał. Problem tutaj został poruszony przez tch0106, ale nie w pełni opisany.

Po prostu wpadłem na ten sam problem i rozwiązałem go w sekcji importu. W prostych słowach: Używaj razem programu ładującego wsparcie, CursorLoader i LoaderCallbacks.

Kilka klas można znaleźć zarówno w lokalnych bibliotekach Androida, jak i bibliotekach wsparcia. Nie mieszaj bibliotek pomocniczych z wersjami bibliotek nieobsługiwanych.

// Use these together 
import android.support.v4.content.CursorLoader; 
import android.support.v4.app.LoaderManager.LoaderCallbacks; 
import android.support.v4.content.Loader; 
import android.support.v4.widget.SimpleCursorAdapter; 

// Or use these, but don't mix and match 
import android.content.CursorLoader; 
import android.content.Loader; 
import android.app.LoaderManager.LoaderCallbacks; 
import android.widget.SimpleCursorAdapter; 
+0

To działało ze mnie. I mieszałem import android.support.v4.content.CursorLoader z importem android.app.LoaderManager.LoaderCallbacks. Dziękuję za pomoc w szybkim znalezieniu tego. Ktoś powinien oznaczyć to jako poprawną odpowiedź. –

+0

Nie działa dla mnie :( – Brandon

+0

pracował człowiek !! niesamowite! Proszę oznaczyć go jako odpowiedź. – eRaisedToX

0

Mam rozwiązać mój problem, bardzo podobny do tego, zmieniając importu ... Popełniłem błąd, kiedy ogłosił ładowarka niestandardową.

// My custom loader java class: 

import android.content.Context; 
import android.content.AsyncTaskLoader; //this was the place of my mistake right here 
import java.util.ArrayList; 

public class ArticleLoader extends AsyncTaskLoader<ArrayList<Article>> { 

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

    @Override 
    protected void onStartLoading() { 
     forceLoad(); 
    } 

    @Override 
    public ArrayList<Article> loadInBackground() { 
     ArrayList<Article> articles = QueryUtils.fetchArticles(getContext()); 
     return articles; 
    } 
} 

Więc, co się stało, że nie zwracają uwagi na tyle i Android Studio posiada auto przywiezione do „android.support.v4.content.AsyncTaskLoader”.

Mam nadzieję, że to pomoże komuś!

Ton

Powiązane problemy