Я получаю очень странную ошибку, хотя код выглядит нормально (на мой взгляд). Я получаю эту ошибку
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
Я сохраняю данные из нескольких EditText
-й в моем фрагменте, затем помещаю их в array
и отправляю в родительские действия, которые затем отправляют их в моей базе данных. Затем после нажатия button
, чтобы показать мне фрагмент с текстом из array
, приложение вылетает. Вот мой код:
Прочее. java
public class Others extends AppCompatActivity {
MyAsyncTask1 mt;
private String numberPickersValues;
private Button button;
private NumberPicker numberPicker1;
private NumberPicker numberPicker2;
public static String EXTRA_DATA="com.example.schedule.example.EXTRA_DATA";
/*public static List EXTRA_DATA_arr2= Collections.singletonList("com.example.schedule.example.EXTRA_DATA_arr2");
public static List EXTRA_DATA_arr3= Collections.singletonList("com.example.schedule.example.EXTRA_DATA_arr3");
public static List EXTRA_DATA_arr4= Collections.singletonList("com.example.schedule.example.EXTRA_DATA_arr4");
public static List EXTRA_DATA_arr5= Collections.singletonList("com.example.schedule.example.EXTRA_DATA_arr5");*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_others);
BottomNavigationView bottomNavigationView=findViewById(R.id.bottom_navigation);
numberPicker1=findViewById(R.id.numberpicker1);
numberPicker2=findViewById(R.id.numberpicker2);
numberPicker1.setDescendantFocusability(numberPicker1.FOCUS_BLOCK_DESCENDANTS);
numberPicker2.setDescendantFocusability(numberPicker2.FOCUS_BLOCK_DESCENDANTS);
numberPicker1.setMinValue(7);
numberPicker1.setMaxValue(11);
String[] set_values_for_NP2=new String[]{"А","Б","В","Г","Д"};
numberPicker2.setMaxValue(0);
numberPicker2.setMaxValue(set_values_for_NP2.length-1);
numberPicker2.setDisplayedValues(set_values_for_NP2);
bottomNavigationView.setSelectedItemId(R.id.Others);
button=findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int n1=numberPicker2.getValue();
numberPickersValues=""+numberPicker1.getValue()+numberPicker2.getDisplayedValues()[n1];
mt=new MyAsyncTask1();
mt.execute(numberPickersValues);
}
});
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.Search:
startActivity(new Intent(getApplicationContext()
,Search.class));
overridePendingTransition(0,0);
return true;
case R.id.home:
startActivity(new Intent(getApplicationContext()
,MainActivity.class));
overridePendingTransition(0,0);
return true;
case R.id.Others:
return true;
}
return false;
}
});
}
private void openOthers2() {
int n1=numberPicker2.getValue();
String numberPickersValues=""+numberPicker1.getValue()+numberPicker2.getDisplayedValues()[n1];
Intent intent=new Intent(getApplicationContext(),Others2.class);
intent.putExtra(EXTRA_DATA,numberPickersValues);
startActivity(intent);
}
class MyAsyncTask1 extends AsyncTask<String, Void,Void>{
@Override
protected Void doInBackground(String... params) {
Database db = App.getInstance().getDatabase();
if(db.classDao().doesGroupExist(params[0])){
Intent i=new Intent(getApplicationContext(),Others2.class);
i.putExtra(EXTRA_DATA,numberPickersValues);
Bundle b = new Bundle();
b.putStringArray("array_for_m", db.classDao().findFromMonday(numberPickersValues));
i.putExtras(b);
startActivity(i);
} else {
openOthers2();
}
return null;
}
}
}
Прочее2. java
public class Others2 extends AppCompatActivity {
private Button button;
private ViewPager viewPager;
private Toolbar toolbar;
private Mon2Fragment mon2Fragment;
MyAsyncTaskOthers2 mt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_others2);
button = findViewById(R.id.buttonSave);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setNavigationIcon(R.drawable.ic_back);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mt = new MyAsyncTaskOthers2();
mt.execute();
}
});
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(), Others.class));
}
});
viewPager = findViewById(R.id.viewpager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
viewPager.setOffscreenPageLimit(5);
adapter.AddFragment(new Mon2Fragment(), "Mon");
adapter.AddFragment(new Tue2Fragment(), "Tue");
adapter.AddFragment(new Wed2Fragment(), "Wed");
adapter.AddFragment(new Thu2Fragment(), "Thu");
adapter.AddFragment(new Fri2Fragment(), "Fri");
viewPager.setAdapter(adapter);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public String sendData() {
Intent intent = getIntent();
return intent.getStringExtra(Others.EXTRA_DATA);
}
public String[] sendDataM() {
Bundle b = this.getIntent().getExtras();
String[] array=b.getStringArray("array_for_m");
return array;
/*Intent intent = getIntent();
return intent.getStringArrayExtra("my_stringm");*/
}
class MyAsyncTaskOthers2 extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
Intent intent = getIntent();
Database db = App.getInstance().getDatabase();
Fragment page = getSupportFragmentManager().getFragments().get(0);
Mon2Fragment mon2Fragment = (Mon2Fragment) page;
if (!db.classDao().doesGroupExist(intent.getStringExtra(Others.EXTRA_DATA))) {
ClassEntity new_group = new ClassEntity();
new_group.id_of_a_group = intent.getStringExtra(Others.EXTRA_DATA);
new_group.monday = mon2Fragment.Text_getter();
db.classDao().insert(new_group);
}
else{
db.classDao().update(mon2Fragment.Text_getter(), intent.getStringExtra(Others.EXTRA_DATA));
}
return null;
}
}
}
Mon2Fragment. java
public class Mon2Fragment extends Fragment {
MyAsyncTaskm2 mt;
private TextView textView1;
private TextView textView2;
private TextView textView3;
private TextView textView4;
private TextView textView5;
private TextView textView6;
private TextView textView7;
private TextView textView8;
private EditText editText1;
private EditText editText2;
private EditText editText3;
private EditText editText4;
private EditText editText5;
private EditText editText6;
private EditText editText7;
private EditText editText8;
public Mon2Fragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View Fr = inflater.inflate(R.layout.fragment_mon2, container, false);
textView1 = Fr.findViewById(R.id.text1m);
textView2 = Fr.findViewById(R.id.text2m);
textView3 = Fr.findViewById(R.id.text3m);
textView4 = Fr.findViewById(R.id.text4m);
textView5 = Fr.findViewById(R.id.text5m);
textView6 = Fr.findViewById(R.id.text6m);
textView7 = Fr.findViewById(R.id.text7m);
textView8 = Fr.findViewById(R.id.text8m);
editText1 = Fr.findViewById(R.id.edittext1m);
editText2 = Fr.findViewById(R.id.edittext2m);
editText3 = Fr.findViewById(R.id.edittext3m);
editText4 = Fr.findViewById(R.id.edittext4m);
editText5 = Fr.findViewById(R.id.edittext5m);
editText6 = Fr.findViewById(R.id.edittext6m);
editText7 = Fr.findViewById(R.id.edittext7m);
editText8 = Fr.findViewById(R.id.edittext8m);
String id = null;
Activity act = getActivity();
if (act instanceof Others2) {
id = ((Others2) act).sendData();
}
mt = new MyAsyncTaskm2();
mt.execute(id);
TextEditorSet(editText1);
TextEditorSet(editText2);
TextEditorSet(editText3);
TextEditorSet(editText4);
TextEditorSet(editText5);
TextEditorSet(editText6);
TextEditorSet(editText7);
TextEditorSet(editText8);
Changer(editText1, textView1);
Changer(editText2, textView2);
Changer(editText3, textView3);
Changer(editText4, textView4);
Changer(editText5, textView5);
Changer(editText6, textView6);
Changer(editText7, textView7);
Changer(editText8, textView8);
return Fr;
}
private void Changer(final EditText ET, final TextView TV) {
TV.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
TV.setVisibility(View.INVISIBLE);
ET.setVisibility(View.VISIBLE);
InputMethodManager imm = (InputMethodManager) Objects.requireNonNull(getActivity()).getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(ET, 0);
ET.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
String value = ET.getText().toString();
TV.setText(value);
ET.setVisibility(View.INVISIBLE);
TV.setVisibility(View.VISIBLE);
InputMethodManager imm = (InputMethodManager) Objects.requireNonNull(getActivity()).getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getView().getApplicationWindowToken(), 0);
return true;
}
return false;
}
});
return false;
}
});
}
private void TextEditorSet(EditText ET) {
ET.setTextColor(getResources().getColor(R.color.white));
ET.setSingleLine();
ET.setVisibility(View.INVISIBLE);
ET.setImeOptions(EditorInfo.IME_ACTION_DONE);
}
public String[] Text_getter() {
String[] myStr = new String[8];
myStr[0] = editText1.getText().toString();
myStr[1] = editText2.getText().toString();
myStr[2] = editText3.getText().toString();
myStr[3] = editText4.getText().toString();
myStr[4] = editText5.getText().toString();
myStr[5] = editText6.getText().toString();
myStr[6] = editText7.getText().toString();
myStr[7] = editText8.getText().toString();
return myStr;
}
class MyAsyncTaskm2 extends AsyncTask<String, Void, Boolean> {
@Override
protected Boolean doInBackground(String... params) {
Database db = App.getInstance().getDatabase();
String id = params[0];
boolean test = false;
if (db.classDao().doesGroupExist(id)) {
test = true;
}
return test;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result)
Set();
}
public void Set() {
//String[] arr = {"", "", "", "", "", "", "", ""};
Activity act = getActivity();
if (act instanceof Others2) {
textView1.setText(((Others2) act).sendDataM()[0]);
textView2.setText(((Others2) act).sendDataM()[1]);
textView3.setText(((Others2) act).sendDataM()[2]);
textView4.setText(((Others2) act).sendDataM()[3]);
textView5.setText(((Others2) act).sendDataM()[4]);
textView6.setText(((Others2) act).sendDataM()[5]);
textView7.setText(((Others2) act).sendDataM()[6]);
textView8.setText(((Others2) act).sendDataM()[7]);
}
}
}
}
Dao и ArrayConverter
@androidx.room.Dao
public interface Dao {
@Query("SELECT monday FROM ClassEntity WHERE id_of_a_group = :id")
String[] findFromMonday(String id);
}
public class ArrayConverter {
@TypeConverter
public String[] fromClasses(String subjects){
String[] array = subjects.split(",");
return array;
}
@TypeConverter
public String toClasses(String[] subjects){
String result = "";
StringBuilder sb = new StringBuilder();
for (String s : subjects) {
sb.append(s).append(",");
}
result = sb.deleteCharAt(sb.length() - 1).toString();
return result;
}
}
Компилятор указывает на метод Set()
. Я пробовал разные вещи, но ни одна из них не сработала. Пробовал отладку, которая закончилась неудачно. Надеюсь, вы можете помочь мне. Заранее спасибо