Skip to content
Advertisement

DataModel cannot be cast to java.util.ArrayList

I couldn’t find what the problem is. Logcat is saying :

“Caused by: java.lang.ClassCastException: com.example.project.model.DataModel cannot be cast to java.util.ArrayList”

I tried different solutions but none worked:

  • Parcelable
  • @SuppressWarning

Could someone show me what is wrong in my code please?

DataModel.Java

public class DataModel implements Serializable {

    ArrayList<FeaturesModel> features;
    String title;

    public DataModel(ArrayList<FeaturesModel> featuresModels, String s) {
        features =featuresModels;
        title=s;
    }

    public ArrayList<FeaturesModel> getFeatures() {
        return features;
    }

    public void setFeatures(ArrayList<FeaturesModel> features) {
        this.features = features;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

TableActivity.Java

public class TableActivity extends AppCompatActivity {

    ArrayList<DataModel> dataModelList = new ArrayList<>();
    EditText edtTableCount;
    Button btnCreateTable;
    TableAdapter adapter;
    RecyclerView recylerView;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_table);

        recylerView = findViewById(R.id.rvTables);

        btnCreateTable = findViewById(R.id.btnCreateTable);


        btnCreateTable.setOnClickListener(view -> {

            edtTableCount = findViewById(R.id.edtTableCount);
            String getTableCount = edtTableCount.getText().toString();
            int tableCount = Integer.parseInt(getTableCount);

            for (int i = 0; i< tableCount; i++){

                dataModelList.add(new DataModel(new ArrayList<>(),"Masa " + i));

            }

            edtTableCount.setVisibility(GONE);
            btnCreateTable.setVisibility(GONE);
            recylerView.setVisibility(View.VISIBLE);

        });

        setAdapter();


    }

    public void setAdapter(){

        CustomItemClickListener listener = (v, position) -> {

            Intent i = new Intent(TableActivity.this,DetailsActivity.class);
            i.putExtra("position",position);
            i.putExtra("dataModelList",dataModelList);

            startActivity(i);

        };

        adapter = new TableAdapter(this,dataModelList,listener);
        recylerView.setAdapter(adapter);

    }


}

DetailsActivity.Java

public class DetailsActivity extends AppCompatActivity {

    ArrayList<DataModel> dataModelList = new ArrayList<>();

    DataModel dataModel;
    EditText edtDeviceInfo, edtBrand, edtModel, edtProcessor, edtRam, edtGraphicCard, edtOperationSystem, edtHardDisc, edtPrograms, edtDescription;
    Button btnAdd;

    int position = 0;

    String keyDeviceInfo = "keyDeviceInfo",
            keyBrand = "keyBrand",
            keyModel = "keyModel",
            keyProcessor = "keyModel",
            keyRam = "keyModel",
            keyGraphicCard = "keyModel",
            keyOperationSystem = "keyModel",
            keyHardDisc = "keyModel",
            keyPrograms = "keyModel",
            keyDescription = "keyModel"
            ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details);

        edtDeviceInfo = findViewById(R.id.edtDeviceInfo);
        edtBrand = findViewById(R.id.edtBrand);
        edtModel = findViewById(R.id.edtModel);
        edtProcessor = findViewById(R.id.edtProcessor);
        edtRam = findViewById(R.id.edtRam);
        edtGraphicCard = findViewById(R.id.edtGraphicCard);
        edtOperationSystem = findViewById(R.id.edtOperationSystem);
        edtHardDisc = findViewById(R.id.edtHardDisc);
        edtPrograms = findViewById(R.id.edtPrograms);
        edtDescription = findViewById(R.id.edtDescription);
        btnAdd = findViewById(R.id.btnAdd);

        dataModelList = (DataModel) getIntent().getSerializableExtra("dataModelList");
        position = getIntent().getIntExtra("position",0);
        dataModel = dataModelList.get(position);

        btnAdd.setOnClickListener(view -> {

            setInformations(

                    edtDeviceInfo.getText().toString(),
                    edtBrand.getText().toString(),
                    edtModel.getText().toString(),
                    edtProcessor.getText().toString(),
                    edtRam.getText().toString(),
                    edtGraphicCard.getText().toString(),
                    edtOperationSystem.getText().toString(),
                    edtHardDisc.getText().toString(),
                    edtPrograms.getText().toString(),
                    edtDescription.getText().toString()

            );

        });

    }

    public void setInformations(String deviceInfo, String brand, String model, String processor, String ram, String graphiccard, String operationsystem,
                                String harddisc, String programs, String description){

        edtDeviceInfo.setText(deviceInfo);
        edtBrand.setText(brand);
        edtModel.setText(model);
        edtProcessor.setText(processor);
        edtRam.setText(ram);
        edtGraphicCard.setText(graphiccard);
        edtOperationSystem.setText(operationsystem);
        edtHardDisc.setText(harddisc);
        edtPrograms.setText(programs);
        edtDescription.setText(description);

    }

}

Advertisement

Answer

You are passing object on intent by doing this,

i.putExtra("dataModelList", dataModelList.get(position))

 // dataModelList.get(position) here you are not fetching the list but rather getting single object from list based on position. So, it's object not ArrayList.

and on receiver side, you are expecting ArrayList. It should be like this

dataModel = (DataModel) getIntent().getSerializableExtra("dataModelList");
User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement