Я гуглил и играл разными способами, и все еще безуспешно.
По сути, я делаю передачу идентификатора ресурса в намерении для нового действия. Я извлекаю int из намерения и пытаюсь создать экземпляр объекта, используя контекст и идентификатор ресурса, которые я распаковал из намерения.
Первое действие, которое упаковывает намерение и запускает следующее действие:
case R.id.KoreanVocabularymenuBButton:
Intent openBeginnerVocabularyActivity = new Intent(v.getContext(), KoreanVocabularyActivity.class);
openBeginnerVocabularyActivity.putExtra("difficulty", R.raw.beginner_numbers);
startActivity(openBeginnerVocabularyActivity);
break;
Второе действие распаковывает намерение и пытается создать экземпляр объекта с данными:
int resource = getIntent().getExtras().getInt("difficulty");
korean = new KoreanVocabulary(this, resource);
Это конструктор объекта и место возникновения ошибки:
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String word = null;
try {
while ((word = br.readLine()) != null){
vocabulary[index++] = word;
}
} catch (IOException e) {
e.printStackTrace();
}
редактирование:
Индекс является целым числом. Массив словаря [] является частным членом функции. Конструктор пытается инициализировать массив.
Я попытался использовать logcat и получил немного путаницы:
I/ActivityManager( 51): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=korean.koreanstudy/.MainMenuActivity bnds=[5,234][115,352] }
W/WindowManager( 51): No window to dispatch pointer action 0
W/WindowManager( 51): No window to dispatch pointer action 1
I/ActivityManager( 51): Displayed activity korean.koreanstudy/.MainMenuActivity: 388 ms (total 388 ms)
I/ActivityManager( 51): Starting activity: Intent { cmp=korean.koreanstudy/.VocabularyMenuActivity }
I/ActivityManager( 51): Displayed activity korean.koreanstudy/.VocabularyMenuActivity: 322 ms (total 322 ms)
I/ActivityManager( 51): Starting activity: Intent { cmp=korean.koreanstudy/.KoreanVocabularyActivity (has extras) }
I/global ( 250): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
D/AndroidRuntime( 250): Shutting down VM
W/dalvikvm( 250): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
E/AndroidRuntime( 250): Uncaught handler: thread main exiting due to uncaught exception
E/AndroidRuntime( 250): java.lang.RuntimeException: Unable to start activity ComponentInfo{korean.koreanstudy/korean.koreanstudy.KoreanVocabularyActivity}: java.lang.ArrayIndexOutOfBoundsException
Причина, по которой мне нужен идентификатор ресурса, заключается в том, что я хочу инициализировать объект с определенным файловым ресурсом. Мне нужен способ определить конкретный файл. То, как я пытался это сделать, - это переключение в меню. Пользователь нажимает на уровень сложности, и в следующем упражнении для этой сложности будет загружен конкретный список. Однако мне нужно знать, какую сложность выбрал пользователь. Вот почему я пытаюсь отследить удостоверение личности.
изменить 2:
Это информация о классе и конструкторе для массива.
private int index = 0;
private int max = 0;
private String[] vocabulary = new String[255];
public KoreanVocabulary(Context context, int resource){
InputStream is = context.getResources().openRawResource(resource);
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String word = null;
try {
while ((word = br.readLine()) != null){
vocabulary[index++] = word;
}
} catch (IOException e) {
e.printStackTrace();
}
max = index;
index = 0;
}
изменить 3:
Извините всех, я нашел проблему. У меня как-то была отключена одна ссылка при чтении из массива. Я думал, что проблема была с чтением файла, но, как вы все отметили, это было нормально - вы правы! извините!