Tipos incompatibles en el método onCreateLoader que trabaja con AsyncTaskLoader y Fragment
Consideré algunos ejemplos de trabajo con AsyncTaskLoader y Fragment ( https://gist.github.com/codeswimmer/884591 ) y traté de hacer lo mismo. Pero ahora no puedo arreglar errores incompatibles error – en el método onCreateLoader. No tengo ni idea de por qué sucede, porque he hecho lo mismo.
FeedLoader.java
- AsyncTaskLoader personalizado con caché
- Custom AsyncTaskLoader, loadinBackground no se llama después de 5 intentos
- AsyncTaskLoader onLoadFinished con un cambio de tarea y configuración pendiente
- Actualizar la interfaz de usuario desde un AsyncTaskLoader
- ¿Qué hace realmente AsyncTaskLoader.deliverResult ()?
public class FeedLoader extends AsyncTaskLoader<ArrayList<RSSItemData>> { ArrayList<RSSItemData> listData; Context ctx; RSSItemData rssItem; final Integer HTTP_CONNECTION_TIMEOUT = 15; DBHelper dbHelper; public FeedLoader(Context context) { super(context); this.ctx = context; dbHelper = new DBHelper(ctx); } @Override public ArrayList<RSSItemData> loadInBackground() { listData = new ArrayList<RSSItemData>(); if(!BaseUtils.isNetworkAvailable(ctx)) return getNewsFromDB(); if(doWeHaveAnyNews()){ Log.d("myLogs", "We have news!"); String data = JSONUtils.getJSON("http://I-changed-URL.com", HTTP_CONNECTION_TIMEOUT*1000, ctx); JSONResult result = new Gson().fromJson(data, JSONResult.class); listData = result.items; deleteAllNewsFromDB(); putNewsIntoDB(listData); } else{ Log.d("myLogs", "No news, retrieve from database"); listData = getNewsFromDB(); } Log.d("myLogs", "Size of listData - " + listData.size()); return listData; } public boolean doWeHaveAnyNews() {...} public void putNewsIntoDB(ArrayList<RSSItemData> listData) {...} public void deleteAllNewsFromDB() {...} public ArrayList<RSSItemData> getNewsFromDB() {...} }
RetrieveFeedFragment.java
public class RetrieveFeedFragment extends Fragment implements LoaderManager.LoaderCallbacks<ArrayList<RSSItemData>> { private RecyclerView rvNews; LinearLayout progBarLinearLayout; ProgressBar progBar; TextView progBarText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); getActivity().getSupportLoaderManager().initLoader(0, null, this).forceLoad(); Log.d("myLogs", "Fragment onCreate"); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d("myLogs", "Fragment onCreateView"); View v = inflater.inflate(R.layout.news_list_fragment, null); rvNews = (RecyclerView) v.findViewById(R.id.listViewNews); LinearLayoutManager llm = new LinearLayoutManager(getActivity()); rvNews.setLayoutManager(llm); rvNews.setHasFixedSize(true); rvNews = (RecyclerView) v.findViewById(R.id.listViewNews); progBarLinearLayout = (LinearLayout) v.findViewById(R.id.progressBarLinearLayout); progBar = (ProgressBar) v.findViewById(R.id.progressBar); progBarText = (TextView) v.findViewById(R.id.progressBarText); return v; } @Override public Loader<ArrayList<RSSItemData>> onCreateLoader(int id, Bundle args) { return new FeedLoader(getActivity()); /* Incompatible types ERROR Required - anroid.support.v4.content.Loader <java.util.ArrayList<com.project.myproject.RetrieveFeed.RSSItemData>> Found - com.project.myproject.RetrieveFeed.FeedLoader */ } @Override public void onLoadFinished(Loader<ArrayList<RSSItemData>> loader, ArrayList<RSSItemData> listData) { // RSSAdapter = new RSSAdapter(listData, getActivity()); // rvNews.setAdapter(RSSAdapter); // progBarLinearLayout.setVisibility(LinearLayout.GONE); Log.d("myLogs", "onLoadFinished"); } @Override public void onLoaderReset(Loader<ArrayList<RSSItemData>> loader) { Log.d("myLogs", "onLoaderReset"); } }
MainActivity.java (por si acaso)
public class MainActivity extends FragmentActivity { RetrieveFeedFragment fragment;; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null){ fragment = new RetrieveFeedFragment(); getSupportFragmentManager().beginTransaction().add(R.id.fragment_news, fragment, "retrieve_feed_tag").commit(); Log.d("myLogs", "New Fragment in Activity"); } else{ fragment = (RetrieveFeedFragment) getSupportFragmentManager().findFragmentByTag("retrieve_feed_tag"); Log.d("myLogs", "Get old Fragment by tag in Activity"); } } }
- ¿Cómo funciona la cancelación de un AsyncTaskLoader?
- Datos fuera de sincronización entre un CursorLoader personalizado y un CursorAdapter respaldando un ListView
- Cómo saber si AsyncTaskLoader se está ejecutando
- Cómo pasar params a Android AsnycTaskLoader
- AsyncTaskLoader no llama a onLoadFinished a menos que devuelva un nuevo objeto en loadInBackground
- Utilizar LoaderCallback sin Fragmento
- Explique AsyncTaskLoader
- Android - Estrategia de grupo de subprocesos y Loader se puede utilizar para implementarlo?
Compruebe sus importaciones. Asegúrate de usar android.support.v4.app.LoaderManager.LoaderCallbacks<D>
lugar de android.app.LoaderManager.LoaderCallbacks<D>
en tu Fragmento y android.support.v4.content.AsyncTaskLoader<D>
en tu FeedLoader
- FragmentMap + ActionBar Tab
- ¿Diferencia entre Android Speech to Text API (Intención de reconocimiento) y Google Cloud Speech API?