java.lang.ClassCastException: com.crumbin.tabs.HomeActivity$AsyncLoader cannot be cast to android.app.Activity
at com.crumbin.utilities.UserFollowingListAdapter.(UserFollowingListAdapter.java:40)
at com.crumbin.tabs.HomeActivity$AsyncLoader.onPostExecute(HomeActivity.java:106)
Adapter 構造函數期望 Activity 類型 Context,但傳入了 AsyncLoader 實例(this 指向內部類)。
protected void onPostExecute(String result) {
UserFollowingListAdapter csl = new UserFollowingListAdapter(
HomeActivity.this, // 正確:外部類 Activity
R.layout.user_crumbs_list_item,
users1,
this); // ❌ 錯誤:this 是 AsyncLoader,非 Activity/Context
lv.setAdapter(csl);
}
protected void onPostExecute(String result) {
UserFollowingListAdapter csl = new UserFollowingListAdapter(
HomeActivity.this, // 外部 Activity
R.layout.user_crumbs_list_item,
users1,
HomeActivity.this); // ✅ 修正:傳遞 HomeActivity.this 作為 Context/Listener
lv.setAdapter(csl);
}
public UserFollowingListAdapter(Context context, int layoutResId,
List data, OnItemClickListener listener) {
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
this.data = data;
this.listener = listener;
}
// Context 用於 inflate、獲取資源
// Listener 定義為接口,Activity 實現
AsyncTask 已棄用 (API 30)。推薦:
lifecycleScope.launch {
val users = async(Dispatchers.IO) { user.getFollowingCrumbsUpList() }.await()
withContext(Dispatchers.Main) {
adapter.submitList(users) // ListAdapter / PagingDataAdapter
}
}
內部類 this ≠ 外部 Activity。傳遞 Context/Listener 時務必用 OuterClass.this。棄用 AsyncTask,遷移至 Coroutines 等現代異步框架,從根源避免此類上下文混淆錯誤。