0

I'm creating my own application. I tested it on Android Lollipop and Marshmallow - everything works great. But whenever I try Android Kitkat, an error occurs. Here's error log:

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.newproject/com.example.newproject.Progi}: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.math.BigDecimal[][]
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
                                                                      at android.app.ActivityThread.access$600(ActivityThread.java:130)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                      at android.os.Looper.loop(Looper.java:137)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:4745)
                                                                      at java.lang.reflect.Method.invokeNative(Native Method)
                                                                      at java.lang.reflect.Method.invoke(Method.java:511)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                      at dalvik.system.NativeStart.main(Native Method)
                                                                   Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.math.BigDecimal[][]
                                                                      at com.example.newproject.Progi.onCreate(Progi.java:62)
                                                                      at android.app.Activity.performCreate(Activity.java:5008)
                                                                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
                                                                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
                                                                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
                                                                      at android.app.ActivityThread.access$600(ActivityThread.java:130) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                      at android.os.Looper.loop(Looper.java:137) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:4745) 
                                                                      at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                      at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                                                                      at dalvik.system.NativeStart.main(Native Method) 

It looks like problem is on line 62 in "progi" class, but - as for me - everything is OK especially that on newer Android versions it works great.

public class Progi extends AppCompatActivity {
Intent intent;
Bundle liczby;
Bundle doble;
BigDecimal tablica [][];
BigDecimal punkty = new BigDecimal(-1);

@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
    android.content.SharedPreferences shared = android.preference.PreferenceManager.getDefaultSharedPreferences(this);
    boolean warunek = shared.getBoolean("serial", false);
    android.view.MenuItem menuitem = menu.getItem(0);
    if(warunek)
    {
        menuitem.setTitle("Oceny pojedynczo");
    }
    else menuitem.setTitle("Oceny seryjnie");
    return true;
}


public boolean onCreateOptionsMenu(Menu menu) {
    android.view.MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.firstmenu, menu);
    return true;
}

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.layoutprogi);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);
    getSupportActionBar().setTitle("Progi punktowe");
    intent = getIntent();
    liczby = intent.getBundleExtra("liczby");
    doble = intent.getBundleExtra("doble");
    tablica = (BigDecimal[][]) doble.getSerializable("doble"); //here is line 62 
    if(intent.hasExtra("max")) {
        Bundle a = intent.getBundleExtra("max");
        punkty = (BigDecimal) a.getSerializable("max");
    }
    przejscie(true);

    if(punkty.compareTo(new BigDecimal(-3))==0)
    {
        procenty(findViewById(android.R.id.content));
    }
    else if(punkty.compareTo(new BigDecimal(-1))!=0)
{
    liczymy(findViewById(android.R.id.content));
}}

And in case someone asking "what 'tablica' gets from intent?":

BigDecimal[][] tablica = new BigDecimal[16][3];
//here i get data from file and put in inside "tablica"
Bundle doble = new Bundle();
doble.putSerializable("doble", tablica);
Intent intent = new Intent(Starter.this, MyActivity.class);
intent.putExtra("doble", doble);
startActivity(intent);

Any idea what's wrong?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
BigRedChick
  • 79
  • 1
  • 7

1 Answers1

0

Try switching your array implementation (BigDecimal[] []) to ArrayList.

If you want to pass an Array through an intent on Android versions prior to Android 5.0.1 (maybe some older versions work aswell, but up to Android 4.3 it is NOT working) You'll have to work around it. You could do this by converting your Array to an ArrayList.

Then you would be casting it something like this:

(ArrayList<ArrayList<BigDecimal>>) doble.getSerializable("doble");

Related SO answer

Morphing Coffee
  • 815
  • 1
  • 10
  • 20