存储用于在下次登录时登录并在电子邮件输入中显示为建议的电子邮件-Android应用程序
我试图找到一种方法,将用于登录应用程序的所有电子邮件保存在设备中,并在用户尝试登录应用程序时将其显示为建议或自动完成 我尝试使用共享首选项,并在登录期间将它们存储到ArrayList中。但是,每次我登录时,电子邮件都会被最新的登录电子邮件取代,而不是累计 示例:首先,我使用admin@admin.com并从系统中注销。对于下一次登录,请输入建议admin@admin.com出现了。但是如果现在我用employee@employee.com,旧存储的电子邮件将替换为新电子邮件 我所做的第一件事是在登录后,我将来自服务器响应的用户电子邮件存储在共享首选项中 接下来,我将数据放入ArrayList存储用于在下次登录时登录并在电子邮件输入中显示为建议的电子邮件-Android应用程序,android,arraylist,login,sharedpreferences,Android,Arraylist,Login,Sharedpreferences,我试图找到一种方法,将用于登录应用程序的所有电子邮件保存在设备中,并在用户尝试登录应用程序时将其显示为建议或自动完成 我尝试使用共享首选项,并在登录期间将它们存储到ArrayList中。但是,每次我登录时,电子邮件都会被最新的登录电子邮件取代,而不是累计 示例:首先,我使用admin@admin.com并从系统中注销。对于下一次登录,请输入建议admin@admin.com出现了。但是如果现在我用employee@employee.com,旧存储的电子邮件将替换为新电子邮件 我所做的第一件事是在
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);
}
SharedReferences getEmail=getSharedReferences(“userEmail”,Context.MODE\u PRIVATE);
String input_email=getEmail.getString(“emp_email”,即“”);
ArrayList userList=新的ArrayList();
userList.add(输入\电子邮件);
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,userList);
if(userList.size()>0){
setAdapter(适配器);
}
上述代码位于登录活动的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) {
}
});
}
public void getDataForId(){
SharedReferences authToken=GetSharedReferences(“authToken”,Context.MODE\u PRIVATE);
String token=authToken.getString(“token”,”);
apiInterface=ApiClient.getApiClient().create(apiInterface.class);
Call Call=apinterface.getData(“承载者”+令牌);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
字符串emp_email=response.body().getUser().getEmail();
ArrayList ListMail=getFromPrefs(此);
if(listEmails==null){
listEmails=newarraylist();
添加(emp_电子邮件);
}
saveToPrefs(这个,listEmails);
/*Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString());
如果(!listEmails.contains(emp_电子邮件)){
listmails.add(“b@b.b");
}
saveToPrefs(这个,listEmails);
Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString())*/
}否则{
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});
}
请注意,在am中,获取变量**emp_email*中的电子邮件(假设您给出的其他两个函数都在文件中)。我的假设是,注释掉的部分(在保存第一封电子邮件之后)将在我注销后以onCreate方法启动
在那里,我得到了pref数据,看到它,新的电子邮件匹配了pref数据,然后将其存储。这是它被替换的时候。您可以像下面这样做
@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;
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList ListMail=getFromPrefs(此);
if(listEmails==null){
listEmails=newarraylist();
listmails.add(“a@a.a");
}
saveToPrefs(这个,listEmails);
Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString());
如果(!listEmails.contains(“b@b.b")){
listmails.add(“b@b.b");
}
saveToPrefs(这个,listEmails);
Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString());
}
公共静态void saveToPrefs(上下文上下文,ArrayList ListMail){
SharedReferences AppSharedRefers=首选项管理器
.GetDefaultSharedReferences(context.getApplicationContext());
SharedReferences.Editor prefsEditor=AppSharedRefers.edit();
Gson Gson=新的Gson();
String list=gson.toJson(listEmail);
prefsEditor.putString(“list”,list);
提交();
}
公共静态ArrayList getFromPrefs(上下文){
SharedReferences AppSharedRefers=首选项管理器
.GetDefaultSharedReferences(context.getApplicationContext());
Gson Gson=新的Gson();
String list=appSharedPrefs.getString(“list”,即“”);
ArrayList ListMail=gson.fromJson(列表,ArrayList.class);
回信;
}
下面是日志的屏幕截图,您可以按照下面的方式进行操作
@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;
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList ListMail=getFromPrefs(此);
if(listEmails==null){
listEmails=newarraylist();
listmails.add(“a@a.a");
}
saveToPrefs(这个,listEmails);
Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString());
如果(!listEmails.contains(“b@b.b")){
listmails.add(“b@b.b");
}
saveToPrefs(这个,listEmails);
Log.i(“MainActivity”,“onCreate:+getFromPrefs(this.toString());
}
公共静态void saveToPrefs(上下文上下文,ArrayList ListMail){
SharedReferences AppSharedRefers=首选项管理器
.GetDefaultSharedReferences(context.getApplicationContext());
SharedReferences.Editor prefsEditor=AppSharedRefers.edit();
Gson Gson=新的Gson();
String list=gson.toJson(listEmail);
prefsEditor.putString(“list”,list);
提交();
}
公共静态ArrayList getFromPrefs(上下文){
SharedReferences AppSharedRefers=首选项管理器
.getDefaultSharedPr