【问题标题】:sharedpreferences not storing data in androidsharedpreferences不在android中存储数据
【发布时间】:2015-02-26 21:46:28
【问题描述】:

sharedpreferences 不存储数据。错误显示在 getSharedPreferences 此方法中。错误在 DetailPref 键中。并且 catlog 错误是:无法启动活动 ComponentInf com.example.add_fetch_data.MainActivity java.lang.NullPointerException。请任何人帮助我如何存储数据,因为我是 Android 新手。

public class MainActivity extends Activity {    
    Button addData, viewData, saveData, fetchData;
    EditText editName, editAdd;
    TextView textName, textAdd;
    Dialog AddDialog, ViewDialog;
    SharedPreferences pref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pref = getSharedPreferences("DetailPref", MODE_PRIVATE);

        addData = (Button) findViewById(R.id.btn_add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            String name, address;
            @Override
            public void onClick(View arg0) {                
                AddDialog = new Dialog(MainActivity.this);
                AddDialog.setContentView(R.layout.add_fragment);
                AddDialog.setTitle("Enter Details");                
                editName = (EditText) findViewById(R.id.ed_ad_name);
                editAdd = (EditText) findViewById(R.id.ed_ad_add);
                saveData = (Button) findViewById(R.id.save_data);

                saveData.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {
                        name = editName.getText().toString();
                        address = editAdd.getText().toString();

                        SharedPreferences.Editor edit = pref.edit();
                        // Storing data using SharedPreferences
                        edit.putString("Name", name);
                        edit.putString("Address", address);
                        edit.commit();
                        AddDialog.dismiss();                        
                    }
                }); 
                AddDialog.show();
            }
        }); 
   }
}

【问题讨论】:

  • 我测试了你的代码(Sharedpreferences 部分),它没有给出错误。我认为你得到错误的另一个原因。
  • 请发布您的 logcat 错误。
  • 显示您检索首选项的代码。存储看起来不错,和检索有关

标签: java android


【解决方案1】:

尝试使用 edit.apply() 而不是 commit()。

【讨论】:

    【解决方案2】:

    请先清除您的 sharedPreferences 以进行测试。您可以使用代码或在应用程序设置中执行此操作

    SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.clear();
    editor.commit();
    

    而且,您正在使用 3 个不同的标签。 “名称”、“地址”和“DetailPref”: 第一个选项 您需要将所有内容保存在 DetailPref 中。

    也许你需要一个结构。像这样的

    {"Name": "xxxxx" , address: "home"}
    

    所以你可以这样做:

        @Override
        public void onClick(View arg0) {
            name = editName.getText().toString();
            address = editAdd.getText().toString();
    
            SharedPreferences sharedPref = this.getPreferences(Context.MODE_PRIVATE);
            SharedPreferences.Editor edit = sharedPref.edit();
    
            JSONObject jsonToSave = new JSONObject();
            jsonToSave.put("Name", name);
            jsonToSave.put("Address", address);
    
            // Storing data using SharedPreferences
            edit.putString("DetailPref", jsonToSave.toString());
    
            edit.commit();
            AddDialog.dismiss();
        }
    

    第二个选项

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            prefName = getSharedPreferences("Name", MODE_PRIVATE);
            prefAddress = getSharedPreferences("Address", MODE_PRIVATE);
    
            addData = (Button) findViewById(R.id.btn_add_data);
            addData.setOnClickListener(new View.OnClickListener() {
                String name, address;
                @Override
                public void onClick(View arg0) {                
                    AddDialog = new Dialog(MainActivity.this);
                    AddDialog.setContentView(R.layout.add_fragment);
                    AddDialog.setTitle("Enter Details");                
                    editName = (EditText) findViewById(R.id.ed_ad_name);
                    editAdd = (EditText) findViewById(R.id.ed_ad_add);
                    saveData = (Button) findViewById(R.id.save_data);
    
                    saveData.setOnClickListener(new View.OnClickListener() {
    
                        @Override
                        public void onClick(View arg0) {
                            name = editName.getText().toString();
                            address = editAdd.getText().toString();
    
                            SharedPrefearences.Editor editName = prefName.edit();
                            SharedPreferences.Editor editAddress = prefAddress.edit();
                            // Storing data using SharedPreferences
                            editName.putString("Name", name);
                            editAddress.putString("Address", address);
                            editName.commit();
                            editAddress.commit();
                            AddDialog.dismiss();                        
                        }
                    }); 
                    AddDialog.show();
                }
            }); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2015-02-22
      • 1970-01-01
      • 2013-06-24
      • 2013-08-10
      • 2017-03-19
      • 1970-01-01
      相关资源
      最近更新 更多