Как проверить, является ли getResources нулевым, не получая ResourcesNotFound - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть несколько звуков, организованных по уровням: level1explicacio2, level2explicacio8 и т. Д. Иногда этот звук иногда не существует.Поэтому мне нужно проверить, например, существует ли level5explicacio3, и если это так, воспроизвести анимацию.Поэтому я сделал проверку if, если levelSoundPlayer имеет значение null, но, конечно, он не компилируется, потому что не может найти ресурс для levelSoundPlayer.Как я могу разобраться в этом?

        levelSound = "level" + sharedPreferences.getString("Level","1") + "explicacio" + Integer.toString(1);


    Log.i("aviam", levelSound);
    levelSoundPlayer = MediaPlayer.create(this, getResources().getIdentifier(levelSound, "raw", getPackageName()));
    imageView = findViewById(R.id.imageView);
    imageViewReplace = findViewById(R.id.imageViewReplace);

    if (levelSoundPlayer!=null){
        Animation a = new AlphaAnimation(1.00f, 0.00f);
        a.setRepeatMode(Animation.REVERSE);
        a.setRepeatCount(Animation.INFINITE);
        a.setDuration(1000);
        imageViewReplace.startAnimation(a);
    }

1 Ответ

0 голосов
/ 10 февраля 2019

вы можете проверить это по их идентификатору, как показано ниже

levelSound = "level" + sharedPreferences.getString("Level","1") + "explicacio" + Integer.toString(1);
        Log.i("aviam", levelSound);
        levelSoundPlayer = MediaPlayer.create(this, getResources().getIdentifier(levelSound, "raw", getPackageName()));
        imageView = findViewById(R.id.imageView);
        imageViewReplace = findViewById(R.id.imageViewReplace);

        int valId = getResources().getIdentifier(levelSound, "raw", getPackageName());
        if (valId != 0){
            Animation a = new AlphaAnimation(1.00f, 0.00f);
            a.setRepeatMode(Animation.REVERSE);
            a.setRepeatCount(Animation.INFINITE);
            a.setDuration(1000);
            imageViewReplace.startAnimation(a);
        }

В документации https://developer.android.com/reference/android/content/res/Resources также сказано:

int Идентификатор связанного ресурса.Возвращает 0, если такой ресурс не был найден.(0 не является действительным идентификатором ресурса.)

...