Как сохранить несколько данных, используя общие настройки? - PullRequest
0 голосов
/ 27 декабря 2018

Я создаю приложение, в котором в этом упражнении я пытаюсь получить данные от пользователя и сохранить их, используя общие настройки. Но приложение вылетает при нажатии кнопки регистрации.enter image description here

Вот файл SignUpActivity.java -

package com.example.abinas.myapplication;

import android.content.Context;
import android.content.SharedPreferences; 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText; 
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class SignUpActivity extends AppCompatActivity {

private EditText e3;
private EditText e4;
private EditText e5;
private EditText e6;
private Button b2;
private RadioGroup rg;
private RadioButton rb;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);
    rg = (RadioGroup)findViewById(R.id.radioroup);
    e3 = (EditText)findViewById(R.id.editText3);
    e4 = (EditText)findViewById(R.id.editText4);
    e5 = (EditText)findViewById(R.id.editText5);
    e6 = (EditText)findViewById(R.id.editText6);
    b2 = (Button)findViewById(R.id.button2);
    int selected_id = rg.getCheckedRadioButtonId();
    rb = (RadioButton)findViewById(selected_id);
}

public void onButtonClick(View view){

    final SharedPreferences pref;
    pref = getSharedPreferences("user_info",Context.MODE_PRIVATE);
    SharedPreferences.Editor edit = pref.edit();
    edit.putString("gender",rb.getText().toString());
    edit.putString("username",e4.getText().toString());
    edit.putString("name",e3.getText().toString());
    edit.putString("password",e5.getText().toString());
    edit.putInt("phone",Integer.parseInt(e6.getText().toString()));
    edit.apply();
    edit.commit();
    //b2.setText("SAVED");
    //b2.setClickable(false);
}
}

какие изменения необходимо внести, чтобы успешно сохранить данные?

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018
  1. Создайте открытый класс SharedPreference Manager и класс Keystring, который будет содержать несколько данных, таких как имя, имя пользователя, пароль, номер телефона.
  2. Затем создайте объект этого класса в любом месте проекта
  3. Получить и поместить значение легко в любом месте

    SharedPreferenceManager ##

    import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;

открытый класс SharedPreferenceManager {

protected Context mContext;


protected SharedPreferences mSettings;
protected Editor mEditor;

public SharedPreferenceManager(Context ctx, String prefFileName) {
    mContext = ctx;

    mSettings = mContext.getSharedPreferences(prefFileName,
            Context.MODE_PRIVATE);
    mEditor = mSettings.edit();
}

/***
 * Set a value for the key
 ****/
public void setValue(String key, String value) {
    mEditor.putString(key, value);
    mEditor.commit();
}


/***
 * Set a value for the key
 ****/
public void setValue(String key, int value) {
    mEditor.putInt(key, value);
    mEditor.commit();
}

/***
 * Set a value for the key
 ****/
public void setValue(String key, double value) {
    setValue(key, Double.toString(value));
}

/***
 * Set a value for the key
 ****/
public void setValue(String key, long value) {
    mEditor.putLong(key, value);
    mEditor.commit();
}

/****
 * Gets the value from the settings stored natively on the device.
 *
 * @param defaultValue Default value for the key, if one is not found.
 **/
public String getValue(String key, String defaultValue) {
    return mSettings.getString(key, defaultValue);
}

public int getIntValue(String key, int defaultValue) {
    return mSettings.getInt(key, defaultValue);
}

public long getLongValue(String key, long defaultValue) {
    return mSettings.getLong(key, defaultValue);
}

/****
 * Gets the value from the preferences stored natively on the device.
 *
 * @param defValue Default value for the key, if one is not found.
 **/
public boolean getValue(String key, boolean defValue) {
    return mSettings.getBoolean(key, defValue);
}

public void setValue(String key, boolean value) {
    mEditor.putBoolean(key, value);
    mEditor.commit();
}



/**
 * Clear all the preferences store in this {@link android.content.SharedPreferences.Editor}
 */
public boolean clear() {
    try {
        mEditor.clear().commit();
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

/**
 * Removes preference entry for the given key.
 *
 * @param key
 */
public void removeValue(String key) {
    if (mEditor != null) {
        mEditor.remove(key).commit();
    }
}

}

KeyString

public class KeyString {
public static String PREFERENCE_NAME ="APP_PREF";
public static String NAME="NAME";
public static String USER_NAME="USER_NAME";
public static String PHONE_NUMBER="PHONE_NUMBER";
public static String PASSWORD="PASSWORD";
public static String USER_ID="USER_ID";

}

В любой деятельности в любом месте проекта

private SharedPreferenceManager preferenceManager=new new SharedPreferenceManager(context, KeyString.PREFERENCE_NAME);

Теперь установите некоторое значение

preferenceManager.setValue(KeyString.PHONE_NUMBER,"017xxxxx");

Получить данные из префсов

String phoneNumber=preferenceManager.getValue(KeyString.PHONE_NUMBER,""); //default value ""

ByЭтот метод вы можете установить и получить желаемое количество переменных и значений.просто добавьте в keyString и кодирование play.happy ..

0 голосов
/ 27 декабря 2018

Ваш код имеет как edit.apply(), так и edit.commit().Используйте только один из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...