Zibran
Zibran

Reputation: 103

How to Fix ClassCastException in Android Application?

Here is the Error from My Logcat :

Here is the Complete Source Code : https://pastebin.com/MMMybRd0

Caused by: java.lang.ClassCastException:MainScreenTeacher cannot be cast to MainScreen at FragmentHome.onAttach(FragmentHome.java:176)

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;

    }

And Here is my 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();

Here is my 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();

Here is 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;

}

Please Help me Fix the Error, it will be very Much Helpful, Thanks in advance.

Upvotes: 1

Views: 62

Answers (1)

shadow
shadow

Reputation: 124

Your activity which open FragmentHome is MainScreen ( or maybe both of them).in your onAttach,you cast your activity to ** MainScreenTeacher** and make it crash.Try to check like this if(activity instanceOf MainScreenTeacherActivity) -> cast it to MainScreenTeacherActivity else if( activity instanace of MainScreenActivity) -> cast it to MainScreenActivity

Upvotes: 1

Related Questions