应用程序无法在Android Kitkat上运行

时间:2017-11-10 17:37:18

标签: java android

我正在创建自己的应用程序。我在Android Lollipop和Marshmallow上进行了测试 - 一切都很棒。但每当我尝试Android Kitkat时,都会发生错误。这是错误日志:

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) 

看起来问题出现在" progi"但是 - 对于我来说 - 一切都很好,尤其是在较新的Android版本上它运行得很好。

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));
}}

如果有人询问"什么' tablica'从意图中获取?":

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);

知道什么是错的吗?

1 个答案:

答案 0 :(得分:0)

尝试将数组实现(BigDecimal[] [])切换为ArrayList

  

如果您想通过Android版本的意图传递数组   在Android 5.0.1之前(也许一些旧版本可以正常工作,但是还可以   到Android 4.3它不工作)你必须解决它。您   可以通过将您的数组转换为ArrayList来实现此目的。

然后你会像这样投射它:

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

Related SO answer