如何在Android应用程序中修复ClassCastException?

时间:2019-09-25 10:29:31

标签: android

这是错误 来自“我的Logcat”:

  

这是完整的源代码:https://pastebin.com/MMMybRd0

     

由以下原因引起:java.lang.ClassCastException:MainScreenTeacher无法在FragmentHome.onAttach(FragmentHome.java:176)上强制转换为MainScreen。

FragmentHome.java

public class FragmentHome extends Fragment implements RecyclerViewAdapter.ItemListener {
    private static AsyncHttpClient client = new AsyncHttpClient();
    View itemView;
    private LinearLayout busDirectory, absentDirectory;
    private SharedPreferences pref = null;
    RecyclerView recyclerView;
    ArrayList arrayList;
    MainScreen activity;
    private List<SettingProfileItem> students;
    private LoadingView load;
    private FragmentHomeListener fragmentHomeListener;
    private String schoolIdSelected;
    private String studentlIdSelected;
    private String fees_url = "";

    public FragmentHome() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Util.setSelectedLang(getActivity());

    }

    public interface FragmentHomeListener {

        void onSettingsHomeClicked();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        fragmentHomeListener = (FragmentHomeListener) getActivity();

    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        activity = (MainScreen) context;

    }

这是我的MainScreen.java:

public class MainScreen extends AppCompatActivity
        implements RecyclerViewAdapterBottom.ItemListener, FragmentHome.FragmentHomeListener,
        FragmentSettingProfile.SettingsFragmentListener {
    String KEY_ADS_STR = "ads_str_json";
    private static AsyncHttpClient client = new AsyncHttpClient();
    //    String strURLAdv = "http://ws.schoolzoneapp.com/vzons.asmx/getVzonsAdvertisementJsn";
    String strURLUpdate = "http://ws.schoolzoneapp.com/vzons.asmx/updateAppUserLog";
    String[] boomMenuItems;
    int[] boomMenuDrawables;
    BoomMenuButton bmb;


    HashMap<String, Integer> HashMapForLocalRes ;



    private String strAdsJson = null;
    ModelAdv modelAdv;
    private SliderLayout imageSlider;
    LinearLayout tab_menu;
    Button btnHome;
    NavigationView navigationView;
    public RecyclerView recyclerView;
    private ArrayList arrayList;
    public RecyclerViewAdapterBottom adapter;
    HashMap<String, String> url_maps_desc;
    public ImageView tool_imgBack, tool_imgShare, breaking_news;
    private CircleImageView txt_float;
    public TextView tool_txtTitle, txtPowered, tv_student_setting, toolShop, toolAdress;
    public CircleImageView tv_student;
    public RelativeLayout toolbar_layout;

    private int xDelta;
    private int yDelta;
    private ViewGroup mainLayout;
    public Menu mainMenu;
    public boolean showPaymentView;

    private SharedPreferences pref = null;
    private ArrayList<SettingProfileItem> students;
    private LoadingView load;

    private IntentFilter filter = new IntentFilter();
    private ConnectivityReciever connectReciever;


    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        if (strAdsJson != null) outState.putString(KEY_ADS_STR, strAdsJson);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            strAdsJson = savedInstanceState.getString(KEY_ADS_STR);
        }
        AppLovinSdk.initializeSdk(this);
        Fresco.initialize(this);


        setContentView(R.layout.activity_main_screen);
        initView();

这是我的MainScreenTeacher.java:

public class MainScreenTeacher extends AppCompatActivity
     {
String KEY_ADS_STR = "ads_str_json";
private static AsyncHttpClient client = new AsyncHttpClient();
//    String strURLAdv = "http://ws.schoolzoneapp.com/vzons.asmx/getVzonsAdvertisementJsn";
String strURLUpdate = "http://ws.schoolzoneapp.com/vzons.asmx/updateAppUserLog";
String[] boomMenuItems;
int[] boomMenuDrawables;
BoomMenuButton bmb;


HashMap<String, Integer> HashMapForLocalRes ;



private String strAdsJson = null;
ModelAdv modelAdv;
private SliderLayout imageSlider;
LinearLayout tab_menu;
Button btnHome;
NavigationView navigationView;
public RecyclerView recyclerView;
private ArrayList arrayList;
public RecyclerViewAdapterBottom adapter;
HashMap<String, String> url_maps_desc;
public ImageView tool_imgBack, tool_imgShare, breaking_news;
private CircleImageView txt_float;
public TextView tool_txtTitle, txtPowered, tv_student_setting, toolShop, toolAdress;
public CircleImageView tv_student;
public RelativeLayout toolbar_layout;

private int xDelta;
private int yDelta;
private ViewGroup mainLayout;
public Menu mainMenu;
public boolean showPaymentView;

private SharedPreferences pref = null;
private ArrayList<SettingProfileItem> students;
private LoadingView load;

private IntentFilter filter = new IntentFilter();
private ConnectivityReciever connectReciever;


@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (strAdsJson != null) outState.putString(KEY_ADS_STR, strAdsJson);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        strAdsJson = savedInstanceState.getString(KEY_ADS_STR);
    }
    AppLovinSdk.initializeSdk(this);
    Fresco.initialize(this);


    setContentView(R.layout.activity_main_screen_teacher);
    initView();

这是ActivityFragmentHomeSecond.java

public class ActivityFragmentHomeSecond extends Fragment implements RecyclerViewAdapter.ItemListener {
private static AsyncHttpClient client = new AsyncHttpClient();
View itemView;
private LinearLayout busDirectory, absentDirectory;
private SharedPreferences pref = null;
RecyclerView recyclerView;
ArrayList arrayList;
MainScreenTeacher activity;

private List<SettingProfileItem> students;
private LoadingView load;
private ActivityFragmentHomeSecondListener activityFragmentHomeSecondListener;
private String schoolIdSelected;
private String studentlIdSelected;
private String fees_url = "";

public ActivityFragmentHomeSecond() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Util.setSelectedLang(getActivity());

}

public interface ActivityFragmentHomeSecondListener {

    void onSettingsHomeClicked();

}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    activityFragmentHomeSecondListener = (ActivityFragmentHomeSecondListener) getActivity();

}

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    activity = (MainScreenTeacher) context;

}

请帮助我修复错误,这将非常有帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您打开 FragmentHome 的活动是 MainScreen (或者可能是两者)。在onAttach中,您将活动投射到** MainScreenTeacher **并使其崩溃尝试像这样检查if(activity instanceOf MainScreenTeacherActivity )->强制将其强制转换为 MainScreenTeacherActivity ,否则if(activity实例为 MainScreenActivity )-> cast转到 MainScreenActivity

相关问题