【问题标题】:Filling EditText with existing data from SharedPreferences使用 SharedPreferences 中的现有数据填充 EditText
【发布时间】:2011-01-19 01:29:56
【问题描述】:

我确信这是我忽略的非常基本的东西,但与我研究过的所有文章相比,我似乎做得对。

我有一个 DialogPreference,其中包含用户名和密码的编辑文本以及一个用于将数据保存到首选项的按钮。创建后,我想查询首选项并用以前保存的要编辑的数据填充编辑文本框,否则将框留空。目前,如果不存在以前的数据,我没有任何问题,但如果数据确实存在,我的应用程序在尝试打开 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);
        }
    }


}

【问题讨论】:

    标签: android android-edittext settext


    【解决方案1】:

    这是因为您收到了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 工具。它将向您展示应用崩溃的原因、时间和地点。

    【讨论】:

    • 美丽。谢谢。另外,我对编程还很陌生,并且正在自学。我熟悉提出 logcat 并对其进行过滤等,只是不完全确定它显示的许多信息实际上意味着什么。了解这一切都在待办事项清单上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2018-02-07
    相关资源
    最近更新 更多