Хранить электронную почту, которая используется для входа в систему, и отображать ее как предложение для ввода электронной почты при следующем входе в систему - приложение для Android - PullRequest
0 голосов
/ 19 ноября 2018

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

Я попытался использовать общие настройки и сохранить их в ArrayList во время входа в систему. Однако при каждом входе в систему электронное письмо заменяется последним, а не добавляется.

Пример: сначала я авторизируюсь с admin@admin.com и выхожу из системы. При следующем входе в систему появится предложение admin@admin.com. Однако, если теперь я войду в систему с employee@employee.com, старый сохраненный адрес электронной почты будет заменен новым.

То, что я сделал, чтобы получить это, было первым, после входа в систему я сохранил электронную почту пользователя из ответа сервера в общем предпочтении.

Затем я помещаю эти данные в ArrayList

    SharedPreferences getEmail = getSharedPreferences("userEmail", Context.MODE_PRIVATE);
    String input_email = getEmail.getString("emp_email", "");

    ArrayList<String> userList = new ArrayList<>();
    userList.add(input_email);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, userList);
    if (userList.size() > 0){
        userEmail.setAdapter(adapter);
    }

Приведенный выше код внутри метода onCreate активности входа в систему. Как я могу это сделать. Я думаю, может быть, это не правильный способ запомнить адрес электронной почты для автоматического предложения. Если так, то, пожалуйста, укажите мне правильное направление.

Спасибо.

Обновление

Получение ответа от сервера в LoginActivity при успешном входе в систему

public void getDataForId() {

    SharedPreferences authToken = getSharedPreferences("authToken", Context.MODE_PRIVATE);
    String token = authToken.getString("token", "");

    apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
    Call<UserResponse> call = apiInterface.getData("Bearer " + token);
    call.enqueue(new Callback<UserResponse>() {
        @Override
        public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {

            if (response.isSuccessful()) {

                String emp_email = response.body().getUser().getEmail();

                ArrayList<String> listEmails = getFromPrefs(this);

                if(listEmails == null){
                   listEmails = new ArrayList<>();
                   listEmails.add(emp_email);
                }

                saveToPrefs(this, listEmails);

                /*Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());

                if(!listEmails.contains(emp_email)){
                   listEmails.add("b@b.b");
                }

                saveToPrefs(this, listEmails);

                Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());*/


            } else {
            }
        }

        @Override
        public void onFailure(Call<UserResponse> call, Throwable t) {
        }
    });
}

Обратите внимание, что я получаю электронное письмо в переменной ** emp_email * (предположим, что две другие заданные вами функции находятся в файле). Я предполагаю, что закомментированная часть (после сохранения первого электронного письма) будет начинаться в методе onCreate для меня, как и после выхода из системы.

там я получаю данные pref, вижу, что новое электронное письмо совпадает с данными pref, а затем сохраняет их. Это когда его заменяют.

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Попробуйте это.
Я отредактировал твой код

gist.github.com / adrielAd / b1fbc4f8665183eb195871d21cd415eb

// make listEmails global and also initialise this in onCreate so you get already saved emails when you come to this screen
ArrayList<String> listEmails;

public void getDataForId() {

    SharedPreferences authToken = getSharedPreferences("authToken", Context.MODE_PRIVATE);
    String token = authToken.getString("token", "");

    apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
    Call<UserResponse> call = apiInterface.getData("Bearer " + token);
    call.enqueue(new Callback<UserResponse>() {
        @Override
        public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {

            if (response.isSuccessful()) {

                String emp_email = response.body().getUser().getEmail();

                listEmails = getFromPrefs(this);

                if(listEmails == null){
                   listEmails = new ArrayList<>();
                   listEmails.add(emp_email);
                }else{
                  if(!listEmails.contains(emp_email)){
                     listEmails.add(emp_email);
                  }
                }


                saveToPrefs(this, listEmails);

                /*Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());

                if(!listEmails.contains(emp_email)){
                   listEmails.add("b@b.b");
                }

                saveToPrefs(this, listEmails);

                Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());*/


            } else {
            }
        }

        @Override
        public void onFailure(Call<UserResponse> call, Throwable t) {
        }
    });
}
0 голосов
/ 20 ноября 2018

Вы можете сделать, как показано ниже.

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

    ArrayList<String> listEmails = getFromPrefs(this);

    if(listEmails == null){
        listEmails = new ArrayList<>();
        listEmails.add("a@a.a");
    }

    saveToPrefs(this, listEmails);

    Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());

    if(!listEmails.contains("b@b.b")){
        listEmails.add("b@b.b");
    }

    saveToPrefs(this, listEmails);

    Log.i("MainActivity", "onCreate: " + getFromPrefs(this).toString());

}

public static void saveToPrefs(Context context, ArrayList<String> listEmail) {
    SharedPreferences appSharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(context.getApplicationContext());
    SharedPreferences.Editor prefsEditor = appSharedPrefs.edit();
    Gson gson = new Gson();
    String list = gson.toJson(listEmail);
    prefsEditor.putString("list", list);
    prefsEditor.commit();
}


public static ArrayList<String> getFromPrefs(Context context) {
    SharedPreferences appSharedPrefs = PreferenceManager
            .getDefaultSharedPreferences(context.getApplicationContext());
    Gson gson = new Gson();
    String list = appSharedPrefs.getString("list", "");
    ArrayList<String> listEmail = gson.fromJson(list, ArrayList.class);
    return listEmail;
}

Вот скриншот для журналов enter image description here

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