2011-01-19 4 views
0

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

У меня есть DialogPreference, у которого есть edittexts для имени пользователя и пароля и кнопка для сохранения данных в настройках. После создания я хотел бы запросить настройки и заполнить поля edittext с ранее сохраненными данными для редактирования, иначе оставьте поля пустыми. В настоящее время, если никаких предыдущих данных не существует, у меня нет проблем, но если данные действительно существуют, мое приложение падает при попытке открыть 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); 
     } 
    } 


} 

ответ

2

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

// 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); 

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

+0

Красивые. Работала благодарность. Кроме того, я довольно новичок в программировании и самообучаюсь. Я знаком с созданием logcat и фильтрацией и т. Д., Просто не совсем уверен в том, что на самом деле означает информация, которую он отображает. Понимание этого происходит в списке задач. – Ronnie

Смежные вопросы