2012-10-24 2 views
5

うまくいけば簡単なJavaの質問私はちょうど忘れてしまった、または理解していないだろう。私はAndroid 4.0のローダーで遊んでいました。プログラムは今のように働いていますが、今私は次の部分を探しています。私は、標準のカーソルローダーとカスタムAsyncTaskLoaderが必要です。私はパート1でローダーにcursorLoaderを変換しようとしています。loaderにcursorLoaderをキャストする方法<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; 
    } 

タイプミスマッチは、CursorLoaderからLoaderに変換できません。

私はそれが

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

で動作させることができると信じていますが、警告が好きではありません:生タイプです

LoaderManager.LoaderCallbacksを。汎用タイプのLoaderManager.LoaderCallbacksへの参照は、パラメータ化する必要があります。

ご協力いただきありがとうございます。

答えて

2

変更

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

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

への最初の文では、戻り値の型が Objectコンクリートで、JVMに指示します。新しい文は、jvmに ObjectのTYPEを通知します。

これをお読みください。tutorial

+2

これはまだうまくいかない。戻り値の型はLoaderManager.LoaderCallbacks .onCreateLoader(int、Bundle)と互換性がありません。 – jimsis

7

インポートをチェックし、あなたが誤ってこれらの2を使用することがあります。

import android.content.CursorLoader; 

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

ようこそStackoverflowへ!これらの輸入品がいかに正確に誤用されているかを強調した場合、あなたの答えははるかに役立ちます。 – mvp

-1

これを見てください: Android AsyncTaskLoader Reference

私はあなたの問題は、この行に存在信じます:

public class MainFragment extends ListFragment implements 
    //LoaderManager.LoaderCallbacks<Cursor> 
    LoaderManager.LoaderCallbacks 
0123あなたはこのようなものに変更する必要があり

:これは古いスレッドですが

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

、それはまだ完全には答えられていません。ここの問題はtch0106によって触れられましたが、完全には説明されていません。

同じ問題が発生し、インポートセクションで解決しました。簡単に言えば、サポートLoader、CursorLoader、およびLoaderCallbackを一緒に使用します。

いくつかのクラスは、アンドロイドローカルライブラリとサポートライブラリの両方にあります。サポートライブラリを非サポートライブラリバージョンと混用しないでください。

// 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

これは私の働くフォームです。 import android.support.v4.content.CursorLoaderとimport android.app.LoaderManager.LoaderCallbacksを混在させました。これを迅速に見つけられるように助けてくれてありがとう誰かが正しい答えとしてこれをマークする必要があります。 –

+0

私のために働かなかった:( – Brandon

+0

働いた人!!素晴らしい!!!それを答えとしてマークしてください。 – eRaisedToX

0

私は、カスタムローダーを宣言したときに、インポートを変更することで...私は、ミスを犯し、これと非常に似て、私の問題を解決しました。

// 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; 
    } 
} 

だから、何が起こったことは、私は十分な注意を払っていないとAndroid Studioが「android.support.v4.content.AsyncTaskLoader」自動輸入しているということでした。

これが誰かを助けることを願っています!

tone

関連する問題