Как сохранить значение по умолчанию в SharedPreferences - PullRequest
0 голосов
/ 07 октября 2018

Я создаю ресторанное приложение, которое состоит из участников, которые регистрируются / входят в систему, и не являются членами, чтобы просматривать меню, пропуская процесс регистрации / входа в систему.Мой домашний экран имеет меню (для пользователей, не являющихся участниками, для просмотра напрямую), кнопки входа и регистрации (для регистрации и входа в систему).Я хочу сохранить идентификатор телефона и пароль по умолчанию в SharedPreference, чтобы «не участники» могли просматривать меню, пропустив процесс входа в систему / регистрации (p / s автоматический вход только для пользователей, не являющихся членами ).Тем не менее, я всегда сталкиваюсь с ошибкой nullPointerException и не могу позволить не-членам просматривать, когда они нажимают кнопку меню.Я не знаю, где не так, потому что я только начинающий и учебный процесс.

Constant.java

public class Constant {
public static final String DEFAULT_PHONE_ID = "9876543210";
public static final String DEFAULT_PASSWORD = "12345";
}

AppPreferences.java

public class AppPreferences {

// Class variables
private Context context;
private static SharedPreferences sharedPreferences;
private static SharedPreferences.Editor editor;
public static final String PREF_NAME = "iMenuApp";
private int PRIVATE_MODE = 0;

// Define your preferences key
private static final String USER_PHONE = "9876543210";
private static final String USER_PASSWORD = "12345";

private AppPreferences(Context context)
{
    this.context = context;
    sharedPreferences = this.context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);

    if (sharedPreferences != null)
    {
        editor = sharedPreferences.edit();
    }
}

//Store user PhoneId


public void setUserPhoneId(String userId){
    String TAG = "AppPref:setUserId";
    try
    {
        editor.putString(USER_PHONE, userId);
        editor.commit();
    } catch (Exception e) {
        Log.e(TAG, String.valueOf(e));
    }
}

// Get userPhoneId
public String getUserPhoneId(){
    return sharedPreferences.getString(USER_PHONE,"default_phone");
}

//Store userPassword
public void setUserPassword(String userPassword){
    String TAG = "AppPref:setUserPassword";
    try
    {
        editor.putString(USER_PASSWORD, userPassword);
        editor.commit();
    } catch (Exception e) {
        Log.e(TAG, String.valueOf(e));
    }
}

// Get userPassword
public String getUserPassword(){
    return sharedPreferences.getString(USER_PASSWORD,"default_password");
}


}

MainActivity.java

public class MainActivity extends AppCompatActivity {

Button btnSignIn, btnSignUp, btnMenu;
public AppPreferences appPreference;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnMenu = (Button)findViewById(R.id.btnMenu);
    btnSignUp = (Button)findViewById(R.id.btnSignUp);
    btnSignIn = (Button)findViewById(R.id.btnSignIn);



    btnMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent home = new Intent(MainActivity.this, Home.class);
            //Here save user info to preferences
            appPreference.setUserPhoneId(Constant.DEFAULT_PHONE_ID);
            appPreference.setUserPassword(Constant.DEFAULT_PASSWORD);
            startActivity(home);


        }
    });

    btnSignUp.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent signUp = new Intent(MainActivity.this, SignUp.class);
            startActivity(signUp);
        }
    });

    btnSignIn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent signIn = new Intent(MainActivity.this, SignIn.class);
            startActivity(signIn);
        }
    });
}
}

Мне нужно отслеживать заказы транзакций для нечленов, поэтому мне нужно установить для всех нечленов телефонный идентификатор и пароль по умолчанию.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Вам необходимо инициализировать объект предпочтения приложения перед доступом к его методу и значениям по умолчанию, которые можно вернуть из предпочтения, если значения ключа не найдены.

 sharedPreferences.getString(USER_PHONE,"default_phone");
0 голосов
/ 07 октября 2018

Вы никогда не инициализировали appPreference в своей основной деятельности.

Сделайте это в onCreate():

appPreference = new AppPreferences(this);
...