Заполнение EditText существующими данными из SharedPreferences - PullRequest
0 голосов
/ 19 января 2011

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

У меня есть DialogPreference, в котором есть edittexts для имени пользователя и пароля, и кнопка для сохранения данных в настройках. После создания я хотел бы запросить настройки и заполнить поля текста редактирования ранее сохраненными данными для редактирования, в противном случае оставьте поля пустыми. В настоящее время, если никаких предыдущих данных не существует, у меня нет проблем, но если данные существуют, мое приложение падает при попытке открыть DialogPreference.

Мой код DialogPreference:

public class AccDialog extends DialogPreference implements DialogInterface.OnClickListener {

    private EditText mUserbox, mPassbox;
    CharSequence mPassboxdata, mUserboxdata;
    private Context mContext;

    private int mWhichButtonClicked;


    public AccDialog(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;

    }

    @Override
    protected View onCreateDialogView() {

        // Access default SharedPreferences
        @SuppressWarnings("unused")
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);

        // Register listener
        final OnCheckedChangeListener mShowchar_listener;


        // Run the following methods onCreate
        existingData();


        @SuppressWarnings("unused")
        LinearLayout.LayoutParams params;
        LinearLayout layout = new LinearLayout(mContext);
            layout.setOrientation(LinearLayout.VERTICAL);
            layout.setPadding(10, 10, 10, 10);
            layout.setBackgroundColor(0xFF000000);


            mUserbox = new EditText(mContext);
                mUserbox.setSingleLine(true);   
                mUserbox.setSelectAllOnFocus(true);

            mPassbox = new EditText(mContext);
                mPassbox.setSingleLine(true);
                mPassbox.setSelectAllOnFocus(true);

            layout.addView(mUserbox);
            layout.addView(mPassbox);

        return layout;  
    }   


    private void existingData() {
        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mContext);
        String Unamedata = pref.getString("usernamekey", "");
        String Pworddata = pref.getString("passwordkey", "");

        if((Unamedata.length() != 0) && (Pworddata.length() != 0)) {
            mUserbox.setText(Unamedata);
            mPassbox.setText(Pworddata);
        }
    }


}

1 Ответ

2 голосов
/ 19 января 2011

Это потому что вы получаете NullPointerException.Вы звоните existingData() до создания правок.Это должно работать следующим образом:

    // initialize them first!!!!
    mUserbox = new EditText(mContext);
    mPassbox = new EditText(mContext);
    // Run the following methods onCreate
    existingData();


    @SuppressWarnings("unused")
    LinearLayout.LayoutParams params;
    LinearLayout layout = new LinearLayout(mContext);
        layout.setOrientation(LinearLayout.VERTICAL);
        layout.setPadding(10, 10, 10, 10);
        layout.setBackgroundColor(0xFF000000);

            mUserbox.setSingleLine(true);   
            mUserbox.setSelectAllOnFocus(true);

            mPassbox.setSingleLine(true);
            mPassbox.setSelectAllOnFocus(true);

        layout.addView(mUserbox);
        layout.addView(mPassbox);

Последний совет: узнайте, как использовать инструмент logcat.Он покажет вам, почему, когда и где происходит сбой вашего приложения.

...