java .lang.ArrayIndexOutOfBoundsException при печати StringArray [] в сообщении Toast в android - PullRequest
1 голос
/ 04 марта 2020

Я работаю с несколькими множественными StringArrary, где я могу напечатать сообщение Toast внутри соответствующего StringArray, но, к сожалению, у меня возникла проблема с отображением toast вне блока. Я делюсь своим кодом ниже

public class Catchment extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

public ArrayAdapter<String> regionAdapter;
public ArrayAdapter<String> districtAdapter;
public ArrayAdapter<String> upzAdapter;
public ArrayAdapter<String> unionAdapter;
public ArrayAdapter<String> villageAdapter;

public String[] Region = {"1","2"};
public String[] District = {"1","2","3"};
public String[] Upz = {"1","2","3","4"};
public String[] Union = {"1","2","3","4","5"};
public String[] Village = {"1","2","3","4","5","6"};

Button catchment_code;
SearchableSpinner spinner_region, spinner_district, spinner_upz, spinner_union, spinner_village;
String[] region_code;
String[] district_code;
String[] upz_code;
String[] union_code;
String[] vill_code;
int positions;
String test;

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

    spinner_region = (SearchableSpinner) findViewById(R.id.region);
    spinner_district = (SearchableSpinner) findViewById(R.id.district);
    spinner_upz = (SearchableSpinner) findViewById(R.id.upz);
    spinner_union = (SearchableSpinner) findViewById(R.id.union);
    spinner_village = (SearchableSpinner) findViewById(R.id.village);

    catchment_code = findViewById(R.id.catchment_code);


    // Set spninner adapter
    regionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Region);
    districtAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, District);
    upzAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Upz);
    unionAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Union);
    villageAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, Village);

    //Set dropdown to the spinner
    regionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    districtAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    upzAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    unionAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    villageAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    //assign to spinner
    spinner_region.setAdapter(regionAdapter);
    spinner_district.setAdapter(districtAdapter);
    spinner_upz.setAdapter(upzAdapter);
    spinner_union.setAdapter(unionAdapter);
    spinner_village.setAdapter(villageAdapter);

    spinner_region.setOnItemSelectedListener(this);
    spinner_district.setOnItemSelectedListener(this);
    spinner_upz.setOnItemSelectedListener(this);
    spinner_union.setOnItemSelectedListener(this);
    spinner_village.setOnItemSelectedListener(this);
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    if (parent.getId() == R.id.region) {
        positions = spinner_region.getSelectedItemPosition();
        region_code = this.getResources().getStringArray(R.array.region_code);
        //Toast.makeText(this, region_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.district) {
        positions = spinner_district.getSelectedItemPosition();
        district_code = this.getResources().getStringArray(R.array.district_code);
        //Toast.makeText(this, district_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.upz) {
        positions = spinner_upz.getSelectedItemPosition();
        upz_code = this.getResources().getStringArray(R.array.upz_code);
        //Toast.makeText(this, upz_code[positions], Toast.LENGTH_SHORT).show();
    }
    if (parent.getId() == R.id.village) {
        positions = spinner_village.getSelectedItemPosition();
        vill_code = this.getResources().getStringArray(R.array.village_code);
        //Toast.makeText(this, vill_code[positions], Toast.LENGTH_LONG).show();
    }
    if (parent.getId() == R.id.union) {
        positions = spinner_union.getSelectedItemPosition();
        union_code = this.getResources().getStringArray(R.array.upz_code);
        //Toast.makeText(this, union_code[positions], Toast.LENGTH_SHORT).show();
    }


    if (!(vill_code == null || region_code == null || district_code == null || upz_code == null ||
            union_code == null)) {
        test = vill_code[positions] +
                union_code[positions] +
                upz_code[positions] +
                district_code[positions] +
                region_code[positions];
        Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
    }
    catchment_code.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(Catchment.this, Participant_Details.class);
            intent.putExtra("catment_code", test);
            startActivity(intent);


        }
    });
     //All Previous toast print fine but here when I stick them together its shows the error.
    Toast.makeText(this, union_code[positions]+upz_code[positions], Toast.LENGTH_SHORT).show();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
}}

Вот мой Logcat

 java.lang.ArrayIndexOutOfBoundsException: length=2; index=3
    at com.example.shouhardoiiiscanner.Catchment.onItemSelected(Catchment.java:116)
    at android.widget.AdapterView.fireOnSelected(AdapterView.java:1366)
    at android.widget.AdapterView.dispatchOnItemSelected(AdapterView.java:1355)
    at android.widget.AdapterView.access$300(AdapterView.java:59)
    at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:1314)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7099)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

Эта ошибка заставила приложение взломать sh и не понять fl aws. Как я могу преодолеть это или что я сделал неправильно или объяснить мне?

...