我一直在用谷歌搜索和玩弄不同的方法,我仍然没有成功。
基本上我正在做的是将意图中的资源ID传递给新活动。我从intent中提取int,并尝试使用我从intent中解压缩的context和resource id来实例化一个对象。
打包意图并开始下一个活动的第一个活动:
case R.id.KoreanVocabularymenuBButton:
Intent openBeginnerVocabularyActivity = new Intent(v.getContext(), KoreanVocabularyActivity.class);
openBeginnerVocabularyActivity.putExtra("difficulty", R.raw.beginner_numbers);
startActivity(openBeginnerVocabularyActivity);
break;
第二个活动解压缩intent并尝试使用数据实例化对象:
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();
}
编辑:
index是一个整数。词汇表[]数组是函数的私有成员。构造函数正在尝试初始化数组。
我尝试使用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
我想要资源ID的原因是因为我想用特定的文件资源初始化对象。我需要一种方法来识别特定文件。我一直在尝试的方式是在菜单上的开关盒内。用户单击难度级别,将在下一个活动中为该难度加载特定列表。但是,我需要知道用户选择了哪个难度。这就是我试图跟踪ID的原因。
编辑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:
对不起大家,我发现了问题。从数组中读取时,我以某种方式关闭了一个引用。我认为问题出在文件阅读上,但是你们都指出这很好 - 你说得对!遗憾!
答案 0 :(得分:0)
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String word = null;
try {
while ((word = br.readLine()) != null){
vocabulary[index++] = word; //<!-- POI#1
}
} catch (IOException e) {
e.printStackTrace(); //<!-- POI#2
}
兴趣点#1:vocabulary
/ index
来自哪里?他们是什么数据类型? index
可能是int
,但问问题并没有什么坏处。
兴趣点#2:你得到例外吗?如果是,那是IOException
吗?不是,你得到的实际错误是什么?我想你忘了原帖子中的那部分 - logcat
应该能够提供你需要的信息。
答案 1 :(得分:0)
如果您只需要获取上下文所需的资源(您的Activity已经拥有此资源)并正常调用它。你不应该传递资源。
此外,您并没有完全按照说法传递资源...您正在传递该资源的值,因此最好从您的下一个活动中访问该资源
答案 2 :(得分:0)
我试图找到构造函数之间的连接
korean = new KoreanVocabulary(this, resource);
和你的其余代码,但找不到任何代码。我猜,你得到的错误是IOException ......其中是
BufferedReader br = new BufferedReader(new InputStreamReader(is));
从中获取输入? 我确实认为问题的标题有些错误 - 你确实在两个活动之间传递了资源。这不是代码中的问题(当然,除非logcat会显示不同的东西)。 * 编辑 - 更不用说,正如其他人已经说过的那样,R。资源全部可用,无需在活动之间传递它们......