Android Hashmap Shared Preferences :
Hashmap Shared Preferences, Every app which requires users to login will have to make sure they make the UI much flexible to the user so that they can have a hassle free login experience so that it is a add on to the quality of the app.
So lets begin this Android Login based on Hashmap Store & Retrieve, Shared Preferences tutorial.
You can refer android studio login example
1.Facebook login android
https://androidcoding.in/facebook-login/
2. android login example with mysql database, php
https://androidcoding.in/2016/05/08/android-login-registration-mysql-php-part-1/
3. android studio login and register
https://androidcoding.in/2016/04/22/android-tutorial-login/
We have seen few apps giving a pin to login instead of username and password mainly in banking sector, and few more because it makes user login much simpler.In our next android studio login activity tutorial we will be dealing with pin based login but for this tutorial we will be dealing with autocomplete user selection.
What ever the style of login we need to take care of user authentication, i,e, the most important factor for an app.
If you are new for android autocompletetextview visit
https://androidcoding.in/autocomplete/
Hashmap Shared Preferences :
LoginPojo
Create a pojo class for Hashmap Shared Preferences
private String Username; private String Password;
And generate getter and setter
public class LoginPojo { private String Username; private String Password; public String getUsername() { return Username; } public void setUsername(String username) { Username = username; } public String getPassword() { return Password; } public void setPassword(String password) { Password = password; } }
activity_login.xml :
Design a login panel by adding a
1) android autocompletetextview –> for username
<AutoCompleteTextView android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Username" android:padding="10dp" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" />
2) android edittext –> for password
<EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:hint="Password" android:inputType="textPassword" android:padding="10dp" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" />
3) android checkbox –> for remember me functionality
<CheckBox android:id="@+id/rememberCheck" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Remember Me" />
4) Android Buttons for sign-in and sign-up
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="30dp" android:background="#fc668e" tools:context="com.androidcoding.storearraylist.LoginActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:background="@android:color/white" android:padding="30dp"> <AutoCompleteTextView android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Username" android:padding="10dp" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:hint="Password" android:inputType="textPassword" android:padding="10dp" android:textColor="@android:color/black" android:textColorHint="@android:color/darker_gray" /> <CheckBox android:id="@+id/rememberCheck" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Remember Me" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="signin" android:text="Sign-in" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="signup" android:text="Sign-up" /> </LinearLayout> </LinearLayout> </LinearLayout>
LoginActivity
Now lets start coding for the view
we are using android shared preferences(save data) and the showing them as suggestion in autocomplete textview.
Initialize all the components which we have specified in design.
Then in sign-up we will be checking if Remember me is checked or not
if checked
if (rememberCheck.isChecked()) { sharedPreferences = getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); edit.putString(username, password); edit.commit(); }
Then as the user tries to sign-in load user data if exists using Hashmap shared preferences as,
private void loaduserdata() { sharedPreferences = this.getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); Map map = sharedPreferences.getAll(); Set keySet = map.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { LoginPojo credlist = new LoginPojo(); String key = (String) iterator.next(); String value = (String) map.get(key); credlist.setUsername(key); credlist.setPassword(value); this.credlist.add(credlist); } for (int i = 0; i < credlist.size(); i++) { LoginPojo bean = credlist.get(i); } List userList = getusers(credlist); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, userList); username.setAdapter(adapter); username.setThreshold(1); username.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> view, View arg1, int position, long arg3) { password.setText(credlist.get(position).getPassword()); } }); } private List getusers(ArrayList<LoginPojo> users) { List list = new ArrayList(); for (LoginPojo c : users) { list.add(c.getUsername()); } return list; }
And now if user credentials is not remembered according to user wish we need to check whether user is logged in or not.
If user is registered move to next screen as a result of successful login.
for (LoginPojo d : credlist) { if (d.getUsername() != null && d.getUsername().contains(username.getText().toString())) { Intent i = new Intent(LoginActivity.this, HomeActivity.class); startActivity(i); }
import android.content.Intent; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; public class LoginActivity extends AppCompatActivity { SharedPreferences sharedPreferences; SharedPreferences.Editor edit; private AutoCompleteTextView username; EditText password; CheckBox rememberCheck; ArrayList<LoginPojo> credlist = new ArrayList<LoginPojo>(); private ArrayAdapter<String> adapter; public static String key = "cred"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); username = (AutoCompleteTextView) findViewById(R.id.username); password = (EditText) findViewById(R.id.password); rememberCheck = (CheckBox) findViewById(R.id.rememberCheck); loaduserdata(); } public void signin(View view) { for (LoginPojo d : credlist) { if (d.getUsername() != null && d.getUsername().contains(username.getText().toString())) { Intent i = new Intent(LoginActivity.this, HomeActivity.class); startActivity(i); } } } public void signup(View view) { String username = this.username.getText().toString(); String password = this.password.getText().toString(); if (rememberCheck.isChecked()) { sharedPreferences = getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); edit.putString(username, password); edit.commit(); } Toast.makeText(this, "Signed-Up Successfully", Toast.LENGTH_SHORT).show(); } private void loaduserdata() { sharedPreferences = this.getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); Map map = sharedPreferences.getAll(); Set keySet = map.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { LoginPojo credlist = new LoginPojo(); String key = (String) iterator.next(); String value = (String) map.get(key); credlist.setUsername(key); credlist.setPassword(value); this.credlist.add(credlist); } for (int i = 0; i < credlist.size(); i++) { LoginPojo bean = credlist.get(i); } List userList = getusers(credlist); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, userList); username.setAdapter(adapter); username.setThreshold(1); username.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> view, View arg1, int position, long arg3) { password.setText(credlist.get(position).getPassword()); } }); } private List getusers(ArrayList<LoginPojo> users) { List list = new ArrayList(); for (LoginPojo c : users) { list.add(c.getUsername()); } return list; } }
activity_home.xml :
once the user logged in successfully we are showing a list of users logged from Hashmap Shared Preferences in you make change functionality of this page accordingly.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/signedusers" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Signed Up Users" android:padding="10dp" android:textSize="18dp" android:gravity="center" android:layout_marginTop="1dp" android:background="@color/colorPrimary" android:textColor="@android:color/white"/> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/signedusers"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/colorPrimary" android:textColor="@android:color/white" android:text="Logout"/> </RelativeLayout>
HomeActivity :
Initialize listview and shared preferences and fetch the list of users registered.
sharedPreferences = this.getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); Map map = sharedPreferences.getAll(); Set keySet = map.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { LoginPojo credlist =new LoginPojo(); String key = (String) iterator.next(); String value = (String)map.get(key); credlist.setUsername(key); credlist.setPassword(value); this.credlist.add(credlist); } for (int i = 0; i < credlist.size(); i++) { LoginPojo bean= credlist.get(i); } List userList = getusers(credlist);
Set the listview to adapter
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, userList); listView.setAdapter(adapter);
import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by Abhishek on 10/15/2017. */ public class HomeActivity extends AppCompatActivity{ SharedPreferences sharedPreferences; SharedPreferences.Editor edit; public static String key = "cred"; ListView listView; private ArrayAdapter<String> adapter; ArrayList<LoginPojo> credlist =new ArrayList<LoginPojo>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); listView = (ListView) findViewById(R.id.listView); sharedPreferences = this.getSharedPreferences(key, MODE_PRIVATE); edit = sharedPreferences.edit(); Map map = sharedPreferences.getAll(); Set keySet = map.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { LoginPojo credlist =new LoginPojo(); String key = (String) iterator.next(); String value = (String)map.get(key); credlist.setUsername(key); credlist.setPassword(value); this.credlist.add(credlist); } for (int i = 0; i < credlist.size(); i++) { LoginPojo bean= credlist.get(i); } List userList = getusers(credlist); adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, userList); listView.setAdapter(adapter); } private List getusers(ArrayList<LoginPojo> users) { List list = new ArrayList(); for (LoginPojo c : users) { list.add(c.getUsername()); } return list; }
Hashmap Shared Preferences Output :
The screen below depicts Android Hashmap Shared Preferences usage
If you have any queries regarding tutorial on Android Hashmap Shared Preferences please comment below.
Share and like this tutorial to make it reach more users.