Почему происходит ошибка "createDisableExceptionQarthFile method fail"?
Я пишу своё приложение. Оно работало безошибочно, но после добавления новых функций появились проблемы. После нажатия клавиши происходит ошибка:
get PatchStore::createDisableExceptionQarthFile method fail.
Класс подсчёта:
package com.example.carapp;
import android.widget.TextView;
public class Calculate {
static int[] benzmoney= {12,8,10};
static float[] factor = {1F, 0.5F,1F};
static int[][] carprice ={{1,2,3,4},{7,8,9,10}};
public static float calculateresult(int position,float fresult,int carposition) {
float alfa;
if (fresult == 0) {
return 0;
} else if (fresult < 10000){
return (0);
} else{
try {
alfa = (fresult * factor[position]);
} catch (){
alfa = fresult * 1F;
}
float v = alfa / 10000 * carprice[carposition][0] + alfa / 40000 * carprice[position][1] + alfa / 80000 * carprice[position][2] + alfa / 150000 * carprice[position][3];
return v;
}
}
public static float calculatebenz(int position,float fresult,float cost){
float a=(fresult/100)*cost*benzmoney[position];
return a;
}
}
В других частях ошибок нет, всё работает. Основной код приложения:
package com.example.carapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import java.text.NumberFormat;
public class carapp extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.carapp);
Spinner typeofroad = (Spinner) findViewById(R.id.typeofroad);
ArrayAdapter<CharSequence> typeofroadAdapter = ArrayAdapter
.createFromResource(this,R.array.typesofroad, android.R.layout.simple_spinner_item);
typeofroadAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
typeofroad.setAdapter(typeofroadAdapter);
Spinner car = (Spinner) findViewById(R.id.cars);
ArrayAdapter<CharSequence> carAdapter = ArrayAdapter.createFromResource(this,R.array.cars, android.R.layout.simple_spinner_item);
carAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
car.setAdapter(carAdapter);
final EditText probegavto = (EditText) findViewById(R.id.probeg);
final EditText resultmoney = (EditText) findViewById(R.id.resultnumber);
final EditText resultbenz = (EditText) findViewById(R.id.benz);
final EditText benzcost = (EditText) findViewById(R.id.costofbenz);
TextView itog = findViewById(R.id.inogogogog);
probegavto.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
recalc();
}
@Override
public void afterTextChanged(Editable editable) {
}
public void recalc(){
float fresult;
try {
fresult = Float.parseFloat(probegavto.getText().toString());
} catch (NumberFormatException e) {
fresult=0;
}
int position = typeofroad.getSelectedItemPosition();
int carposition = car.getSelectedItemPosition();
float fotvet = Calculate.calculateresult(position,fresult,carposition);
float cost;
try {
cost = Float.parseFloat(benzcost.getText().toString());
} catch (NumberFormatException e) {
cost = 0;
}
float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
if (fresult==0 || fresult>9999){
itog.setText(" ");
} else{
itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
}
resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
}
});
typeofroad.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
recalc();
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
public void recalc(){
float fresult;
try {
fresult = Float.parseFloat(probegavto.getText().toString());
} catch (NumberFormatException e) {
fresult=0;
}
int position = typeofroad.getSelectedItemPosition();
int carposition = car.getSelectedItemPosition();
float fotvet = Calculate.calculateresult(position,fresult,carposition);
float cost;
try {
cost = Float.parseFloat(benzcost.getText().toString());
} catch (NumberFormatException e) {
cost = 0;
}
float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
if (fresult==0 || fresult>9999){
itog.setText(" ");
} else{
itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
}
resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
}
});
car.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
recalc();
}
private void recalc(){
float fresult;
try {
fresult = Float.parseFloat(probegavto.getText().toString());
} catch (NumberFormatException e) {
fresult=0;
}
int position = typeofroad.getSelectedItemPosition();
int carposition = car.getSelectedItemPosition();
float fotvet = Calculate.calculateresult(position,fresult,carposition);
float cost;
try {
cost = Float.parseFloat(benzcost.getText().toString());
} catch (NumberFormatException e) {
cost = 0;
}
float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
if (fresult==0 || fresult>9999){
itog.setText(" ");
} else{
itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
}
resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
benzcost.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
recalc();
}
@Override
public void afterTextChanged(Editable editable) {
}
public void recalc(){
float fresult;
try {
fresult = Float.parseFloat(probegavto.getText().toString());
} catch (NumberFormatException e) {
fresult=0;
}
int position = typeofroad.getSelectedItemPosition();
int carposition = car.getSelectedItemPosition();
float fotvet = Calculate.calculateresult(position,fresult,carposition);
float cost;
try {
cost = Float.parseFloat(benzcost.getText().toString());
} catch (NumberFormatException e) {
cost = 0;
}
float fotvet1 = Calculate.calculatebenz(position,fresult,cost);
if (fresult==0 || fresult>9999){
itog.setText(" ");
} else{
itog.setText("Хватит на "+(int)(Math.floor(10000/fresult))+" раз(а)");
}
resultmoney.setText(NumberFormat.getInstance().format(fotvet)+" ₽");
resultbenz.setText(NumberFormat.getInstance().format(fotvet1)+" ₽");
}
});
}
}
Приложение считало на статических данных. Я создал массив, carprice
, из него оно будет брать значения, подставлять, и вроде бы всё работает. Но если переключить на другой тип дороги, изменится число на которое будет домножение (массив factor
), на маленьких числах всё работает идеально, но если числа больше 10000
, то приложение вылетает на главный экран, выдавая ошибку:
E/.example.carap: [qarth_debug:] get PatchStore::createDisableExceptionQarthFile method fail.
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.carapp, PID: 22346
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at com.example.carapp.Calculate.calculateresult(Calculate.java:18)
at com.example.carapp.carapp$2.recalc(carapp.java:97)
at com.example.carapp.carapp$2.onItemSelected(carapp.java:80)
at android.widget.AdapterView.fireOnSelected(AdapterView.java:947)
at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:936)
at android.widget.AdapterView.access$300(AdapterView.java:56)
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:901)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)