分配的值保持为空

时间:2015-10-05 04:43:59

标签: android variables null

这是一段困扰我的代码:我有一个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());

我在不同的地方尝试过变量儿子的测试,但它并没有改变任何东西。

欢迎帮助。

2 个答案:

答案 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);
相关问题