Как правильно инициализировать статическую переменную в PreferenceActivity

#java #android

#java #Android

Вопрос:

У меня есть класс предпочтений PreferenceActivity . Я создаю public static String quality; в Preference.class я добавляю в onCreate

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref);
  quality = "QUALITY_HIGH";//initialize
    }
  

и добавьте в Preference.class этот метод

 public void getQuality() {
    if (keyquality.equals("480p")) {
        quality = "QUALITY_LOW";
        //

    }
    if (keyquality.equals("720p")) {
        //
       quality = "QUALITY_720P";
    }
    if (keyquality.equals("1080p")) {
        //
        quality = "QUALITY_HIGH";
    }

}
  

в другом классе я создаю метод для получения моей переменной и установки настроек

  private void getqualityvideo() {
    /*if (Prefernce.quality == null) {
        preferencecamrecoder = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
    } else {*/
        if (Prefernce.quality.equals("QUALITY_LOW")) {
            preferencecamrecoder = CamcorderProfile.get(CamcorderProfile.QUALITY_LOW);
        }
        if (Prefernce.quality.equals("QUALITY_720P")) {
            preferencecamrecoder = CamcorderProfile.get(CamcorderProfile.QUALITY_720P);
        }
        if (Prefernce.quality.equals("QUALITY_HIGH")) {
            preferencecamrecoder = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
        }
   // }
}
  

Проблема:
при запуске приложения

  private void startServes() {

    btnStart = (ImageView) findViewById(R.id.StartService);
    btnStart.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            v.startAnimation(mAnimationImage);

            Intent intent = new Intent(MainActivity.this, RecorderService.class);

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            startService(intent);
            changeCamera
                    .setEnabled(false);
            btnStart.setEnabled(false);
            setings.setEnabled(false);

            moveTaskToBack(false);
        }
    });

}
  

в другом классе в методе
getqualityvideo()
ошибка NullPointerException
ошибка в этой первой строке
, если (предпочтительно.quality.equals(«QUALITY_LOW»))
почему переменная качества пуста?

Комментарии:

1. сбой происходит при открытии вашего приложения, верно?

2. @Sujith Niraikulathan посмотрите, сбой, когда я запускаю службу, но если я инициализирую свою переменную в службе, приложение работает нормально

3. можете ли вы публиковать полные журналы?

Ответ №1:

Причина в том, что вы устанавливаете Preference.quality onCreate метод в своем Preference классе. Итак, что, вероятно, происходит, так это то, что при запуске вашего приложения в другом классе Preference.quality оно будет null, потому что оно никогда не было инициализировано ни для чего. Причина в том, что другой класс на данный момент не имеет доступа к onCreate методу в вашем Preference классе. onCreate выполняется при запуске действия, но, похоже, этого нигде не происходит в вашем коде. Решением может быть инициализация public static String quality вне вашего onCreate метода, но все же внутри Preference class ,

 public static String quality = "QUALITY_HIGH";

@Override
public void onCreate(Bundle savedInstanceState) {
    //insert code here
}
  

Проблема была просто проблемой области видимости.