Overview

Video Tutorials

Testing Login API with Postman

Choose request type GET and type the URL http://192.168.20.110/demo/login/test/123 ( http://<server-api>/demo/login/<username_login>/<password> )

( ) Click Send

You will see a JSON response

{ "message": "true" }

{ "message": "false" }

Create an Android Studio Project

Project Structure

Add Gradle dependencies and permission

compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.google.code.gson:gson:2.6.1'

apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "com.jackrutorial.androidloginrestfulwebserviceexample" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.google.code.gson:gson:2.6.1' }

<uses-permission android:name="android.permission.INTERNET" />

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.jackrutorial.androidloginrestfulwebserviceexample"> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".LoginActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

Define the Retrofit Interface

Add a new package to src/main/java with the name com.jackrutorial.androidloginrestfulwebserviceexample.model

with the name Create a ResObj class (the POJO classes are wrapped into a typed Retrofit Call class) under com.jackrutorial.androidloginrestfulwebserviceexample.model package and write the following code in it.

package com.jackrutorial.androidloginrestfulwebserviceexample.model; public class ResObj { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }

Add a new package to src/main/java with the name com.jackrutorial.androidloginrestfulwebserviceexample.remote

with the name Create a UserService interface under com.jackrutorial.androidloginrestfulwebserviceexample.remote package. Define the REST API for Retrofit via the following interface.

package com.jackrutorial.androidloginrestfulwebserviceexample.remote; import com.jackrutorial.androidloginrestfulwebserviceexample.model.ResObj; import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Path; public interface UserService { @GET("login/{username}/{password}") Call login(@Path("username") String username, @Path("password") String password); }

package com.jackrutorial.androidloginrestfulwebserviceexample.remote; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; public class RetrofitClient { private static Retrofit retrofit = null; public static Retrofit getClient(String url){ if(retrofit == null){ retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .build(); } return retrofit; } }

package com.jackrutorial.androidloginrestfulwebserviceexample.remote; public class ApiUtils { public static final String BASE_URL = "http://192.168.20.110/demo/"; public static UserService getUserService(){ return RetrofitClient.getClient(BASE_URL).create(UserService.class); } }

Adjust activity

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" tools:context="com.jackrutorial.androidloginrestfulwebserviceexample.LoginActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Username: " /> <EditText android:id="@+id/edtUsername" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Password: " /> <EditText android:id="@+id/edtPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" /> <Button android:id="@+id/btnLogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" /> </LinearLayout> </android.support.constraint.ConstraintLayout>

package com.jackrutorial.androidloginrestfulwebserviceexample; import android.content.Intent; 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.Toast; import com.jackrutorial.androidloginrestfulwebserviceexample.model.ResObj; import com.jackrutorial.androidloginrestfulwebserviceexample.remote.ApiUtils; import com.jackrutorial.androidloginrestfulwebserviceexample.remote.UserService; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class LoginActivity extends AppCompatActivity { EditText edtUsername; EditText edtPassword; Button btnLogin; UserService userService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); edtUsername = (EditText) findViewById(R.id.edtUsername); edtPassword = (EditText) findViewById(R.id.edtPassword); btnLogin = (Button) findViewById(R.id.btnLogin); userService = ApiUtils.getUserService(); btnLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String username = edtUsername.getText().toString(); String password = edtPassword.getText().toString(); //validate form if(validateLogin(username, password)){ //do login doLogin(username, password); } } }); } private boolean validateLogin(String username, String password){ if(username == null || username.trim().length() == 0){ Toast.makeText(this, "Username is required", Toast.LENGTH_SHORT).show(); return false; } if(password == null || password.trim().length() == 0){ Toast.makeText(this, "Password is required", Toast.LENGTH_SHORT).show(); return false; } return true; } private void doLogin(final String username,final String password){ Call call = userService.login(username,password); call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { if(response.isSuccessful()){ ResObj resObj = response.body(); if(resObj.getMessage().equals("true")){ //login start main activity Intent intent = new Intent(LoginActivity.this, MainActivity.class); intent.putExtra("username", username); startActivity(intent); } else { Toast.makeText(LoginActivity.this, "The username or password is incorrect", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(LoginActivity.this, "Error! Please try again!", Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Call call, Throwable t) { Toast.makeText(LoginActivity.this, t.getMessage(), Toast.LENGTH_SHORT).show(); } }); } }

Create Activity

Click the app folder for your project and choose File > New > Activity > Empty Activity

folder for your project and choose Name the new activity " MainActivity ".

". Click Finish.

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout 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" tools:context="com.jackrutorial.androidloginrestfulwebserviceexample.MainActivity"> <TextView android:id="@+id/txtUsername" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" /> </android.support.constraint.ConstraintLayout>

package com.jackrutorial.androidloginrestfulwebserviceexample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity { TextView txtUsername; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtUsername = (TextView) findViewById(R.id.txtUsername); Bundle extras = getIntent().getExtras(); String username; if(extras != null){ username = extras.getString("username"); txtUsername.setText("Welcome " + username); } } }

Run this app in the Android Emulator

Open Android Studio project and click Run.

In the Select Deployment Target dialog, select an existing emulator definition, and then click OK.

If you don’t see a definition you want to use, click Create New Virtual Device to launch the AVD Manager. After you define a new AVD, in the Select Deployment Target dialog, click OK.

If you want to use this emulator definition as the default for your project, select Use same selection for future launches.

Required

In this tutorial We will show you how to create a simple Android app for User Login with Android Studio. This app will send the login request to the RESTFul Web Service using Retrofit 2 HTTP Client.it means user successfully loginit means login failedOpen Android Studio create a new project with an empty activity calledAdd the following dependencies to yourfile.Add the permission to access internet in thefile.In the above class, we’ve definedmethod that perform HTTP requests with annotation.Create aclass underpackage and write the following code in it.Create aclass underpackage and write the following code in it.Change thelayout to the following.Changeactivity code to the following.Change thelayout to the following.Changeactivity code to the following.You can run this app from an Android Studio project. Or you can run this app that's been installed on the emulator as you would run any app on a device.To start the emulator and run this app in your projectNote: