2011-01-19 7 views
0

これは私が見落としているが、私が研究したすべての記事と比較して、本当に基本的なものだと確信しています。EditPextをSharedPreferencesの既存のデータで塗りつぶす

私は、ユーザー名とパスワードの両方にedittextを持つDialogPreferenceと、データを環境設定に保存するボタンを持っています。作成時に、私は設定を照会し、編集されるべき以前に保存されたデータで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を取得するためです。 edittexが作成される前に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ツールの使い方を学んでください。アプリがクラッシュする理由、時期、場所を表示します。

+0

美しい。おかげさまで働きました。また、私はかなりプログラミングに新しいと自己学習です。私はlogcatを立ち上げ、それをフィルタリングすることに精通しています、実際に表示されている情報の何かを完全には確信していません。それをすべて理解することは、todoリストにある。 – Ronnie

関連する問題