asynctaskloader,用于加载程序和后台线程在转换为androidx时获取classcastexception

zf2sa74q  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(254)

我的代码:

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. ArrayList<BookData> arrayList = new ArrayList<>();
  6. recyclerAdapter = new RecyclerAdapter(this,arrayList);
  7. recyclerview = (RecyclerView)findViewById(R.id.recyclerView);
  8. recyclerview.setLayoutManager(new
  9. LinearLayoutManager(this));
  10. recyclerview.setAdapter(recyclerAdapter);
  11. android.app.LoaderManager loaderManager = getLoaderManager();
  12. Log.i(TAG, "Now calling initLoader");
  13. loaderManager.initLoader(BOOK_LOADER_ID, null, this);
  14. DividerItemDecoration dividerItemDecoration = new
  15. DividerItemDecoration(this,DividerItemDecoration.VERTICAL);
  16. recyclerview.addItemDecoration(dividerItemDecoration);
  17. }
  18. @NonNull
  19. @Override
  20. public Loader<List<BookData>> onCreateLoader(int id, @Nullable Bundle args) {
  21. Log.i(TAG,"Problem with onCreateloader");
  22. return new BookLoader(MainActivity.this,GOOGLEBOOKURL);
  23. }
  24. @Override
  25. public void onLoadFinished(@NonNull Loader<List<BookData>> loader, List<BookData> data) {
  26. recyclerAdapter.clear();
  27. if (data != null && !data.isEmpty()) {
  28. recyclerAdapter.addAll(data);
  29. }
  30. }
  31. @Override
  32. public void onLoaderReset(@NonNull Loader<List<BookData>> loader) {
  33. recyclerAdapter.clear();
  34. Log.i(TAG, "Now loader is resetting");
  35. }

显示类定义的屏幕截图
错误:

  1. Process: com.example.booklistapp, PID: 8575
  2. java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.booklistapp/com.example.booklistapp.MainActivity}: java.lang.ClassCastException: com.example.booklistapp.MainActivity cannot be cast to android.app.LoaderManager$LoaderCallbacks
  3. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
  4. at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
  5. at android.app.ActivityThread.-wrap12(ActivityThread.java)
  6. at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
  7. at android.os.Handler.dispatchMessage(Handler.java:102)

我试图解决我在androidx中遇到的错误,但是没有 initloader() 以及 getManager() 调用加载程序。如何通过initloader调用加载程序?

  1. android.app.LoaderManager loaderManager = getLoaderManager();
  2. Log.i(TAG, "Now calling initLoader");
  3. loaderManager.initLoader(BOOK_LOADER_ID, null, this);

我在androidx加载程序中使用android应用程序加载程序,因为没有 initLoader() 以及 getManager() 在androidx。
谢谢您。

xxb16uws

xxb16uws1#

我有装载机在androidx工作:
我的导入看起来像:

  1. import androidx.loader.app.LoaderManager;
  2. import androidx.loader.content.CursorLoader;
  3. import androidx.loader.content.Loader;
  4. import androidx.fragment.app.ListFragment;

碎片如下:

  1. public class MyFragment extends ListFragment implements LoaderManager.LoaderCallbacks<List<BookData>> {

活动如下:

  1. public class ProfileActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<List<BookData>> {

你需要 AppCompatActivity :

  1. import androidx.appcompat.app.AppCompatActivity;

我需要打电话 getSupportLoaderManager() 不是 getLoaderManager() :

  1. LoaderManager lm = getActivity().getSupportLoaderManager();

但理想情况下,您希望在加载程序是开发的基石时摆脱它们,现在它们已被弃用。

展开查看全部

相关问题