这是一段困扰我的代码:我有一个String name reviewChoisi,它带有一个值(例如review3)。在下面的方法中,我不能用它来设置MediaPlayer mp:
public void playCheck(){
zoneAffichage = (TextView)findViewById(R.id.zone_trado_scrollable);
maReponse = (EditText)findViewById(R.id.EditTextMaReponse);
Resources res = getResources();
final int resRaw = res.getIdentifier(reviewChoisi, "raw", getPackageName());
final MediaPlayer mp = MediaPlayer.create(this, resRaw);
final Button monBouton = (Button)findViewById(R.id.check);
monBouton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
lireXMLSolution(reviewChoisi);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if ( maReponse.getText().toString().equalsIgnoreCase(laSolution) ) {
mp.start();
zoneAffichage.setText(Html.fromHtml("<font color=\"blue\">right</font>"));
}
else{
zoneAffichage.setText(Html.fromHtml("<font color=\"red\">wrong</font>"));
}
}
});
}
崩溃发生在
行 final int resRaw = res.getIdentifier(reviewChoisi, "raw", getPackageName());
我在不同的地方尝试过变量儿子的测试,但它并没有改变任何东西。
欢迎帮助。
答案 0 :(得分:1)
子函数在playCheck中声明,一旦运行该函数,变量就被销毁了。由于onClick事件将在函数运行后发生,因此son变量已经被销毁,并且您无法使用它。您仍然可以访问其他变量,因为它们是全局变量。编译器要求儿子最终工作的原因是因为,如果它是最终的,它的价值不会改变,所以程序可以保存它的价值并重复使用它。但是,我的猜测是,当你设置son等于reviewChoisi时,reviewChoisi尚未创建,因此为儿子保存的值为null。
答案 1 :(得分:0)
最后一个解决方案是使用reviewChoisi 在内部onClick(View v){...},使用以下代码
final int resRaw = getResources().getIdentifier(reviewChoisi, "raw", getPackageName());
final MediaPlayer mp = MediaPlayer.create(ReviewActivity.this, resRaw);