Неправильное использование настроек - PullRequest
0 голосов
/ 18 июля 2011

Я пытаюсь добавить настройки в свое приложение, но не могу заставить его работать.

Вот мой res / xml / preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
  <ListPreference 
        android:key="format"
        android:title="Saving Format"
        android:summary="Select the file format"
        android:defaultValue=".jpg" 
        android:entries="@array/format"
        android:entryValues="@array/formatValues" />        
</PreferenceScreen>

Вот мои значения / массив.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="format">
        <item name=".jpg">JPEG</item>
        <item name=".gif">GIF</item>

   </string-array>

    <string-array name="formatValues">
        <item name=".jpg">.jpg</item>
        <item name=".gif">.gif</item>

    </string-array>
</resources>

Вот мои предпочтения активности:

package com.sass.recorder;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class MyPreferences extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {        
       super.onCreate(savedInstanceState);        
       addPreferencesFromResource(R.xml.preferences);        
    }

}

Вот основной класс активности:

...imports..

public class MyApp extends Activity {
...Initializations..
SharedPreferences preferences;
.....
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        ....
        private OnClickListener mOneShotListener = new OnClickListener() {
        public void onClick(View v) {
        //evaluate preferences and change the path variable
        if (preferences.getString("format", ".jpg") == ".jpg") {
        path = "/sdcard/output/" + editText1.getText() + ".jpg";
        } else if (preferences.getString("format", ".gif") == ".gif"){
        path = "/sdcard/output/" + editText1.getText() + ".gif";
        }
        }
        }
    }
}

Работает настройки предпочтений (из менюкоторый я не вставил здесь), но кнопка, которая имеет оценку предпочтений, просто не будет нажимать или реагировать.Иногда отладчик показывает исключение NullPointerException в строке if (preferences.getString("format", ".jpg") == ".jpg")

Есть идеи, что я делаю неправильно?Спасибо!

1 Ответ

0 голосов
/ 19 июля 2011

Вы объявили переменную предпочтения как переменную экземпляра в классе, который используется в OnClickListener, и внутри метода onCreate. Переменная экземпляра никогда не инициализируется и поэтому имеет нулевое значение при обращении к OnClickListener. Изменение

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

в

preferences = PreferenceManager.getDefaultSharedPreferences(this);

в действии MyApp, и это, вероятно, будет работать.

...