Tuesday 25 February 2014

Android Login Activity using Json and HTTP connection

Here is the simple example how to create a Login functionality using HTTP connection. 

Step1 : Create a Class LoginActivity

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class LoginActivity extends Activity implements OnClickListener {

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

        //Button actions
        Button login = (Button) findViewById(R.id.loginButton);
        login.setOnClickListener(this);         

        EditText emailHint = ((EditText) findViewById(R.id.email));
        emailHint.setText("Rahul@Android.Com");

        EditText pwdHint = ((EditText) findViewById(R.id.password));
        pwdHint.setText("Test1234");
    }

    String email;
    String pwd;
    String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.loginButton:
            email = ((EditText) findViewById(R.id.email)).getText().toString().trim();
            pwd = ((EditText) findViewById(R.id.password)).getText().toString().trim();

            if (email.length() >= 1 && pwd.length() >= 1) {
                if (Util.isConnectionAvailable(this)) {
                    //if (email.matches(emailPattern)){
                    new loginRequest().execute(JsonURL.loginURL, email,
                            pwd);

                } else {
                    showToast("No Connection available");
                }
            } else {
                showToast("Please enter complete details");
            }
            break;

        default:
            break;
        }

    }

    /**AsyncTask enables proper and easy use of the UI thread.
     * This class allows to perform background operations and
     * publish results on the UI thread without having to manipulate
     * threads and/or handlers.
     */

    public class loginRequest extends AsyncTask<String, Void, String> {
        private ProgressDialog spinner;

        @Override
        protected void onPreExecute() {

            super.onPreExecute();
            spinner = ProgressDialog.show(LoginActivity.this, "Signing up", "Please wait...");
            spinner.setCancelable(false);
        }

        @Override
        protected String doInBackground(String... params) {

            signUp(params[0], params[1], params[2]);

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            System.out.println("RES -- "+res);
            //start the activity
            startActivity(new Intent(LoginActivity.this, MainActivity.class));
            finish();
            if (spinner.isShowing())
                spinner.dismiss();
        }

        // Json Parser
        JSONObject jsonDataObject = new JSONObject();
        JSONObject jsonObject = new JSONObject();
        String res;
        private void signUp(String url, String email, String pwd) {

            try {
                System.out.println("Login --"+email+"--"+pwd);
                jsonDataObject.put("userName", email);
                jsonDataObject.put("password", pwd);
           
                // Interface for an HTTP client
                HttpClient client = ConnectionWrapper.getNewHttpClient();
                HttpPost post = new HttpPost("YOUR URL");

                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
                nameValuePairs.add(new BasicNameValuePair("userName", email));
                nameValuePairs.add(new BasicNameValuePair("password", pwd));
                nameValuePairs.add(new BasicNameValuePair(HTTP.CONTENT_TYPE,"application/json"));

                post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = client.execute(post);
                System.out.println("Response -- -"+response);
               
                //Wraps an existing Reader and buffers the input.
                BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

                String line = "";
                while ((line = rd.readLine()) != null) {
                    System.out.println("Buffered rd -- "+line);

                    JSONObject jObj = new JSONObject(line);
                    JSONArray menuListObject = jObj.getJSONArray("Data");

                    for(int i = 0 ; i < menuListObject.length(); i++){                       
                        JSONObject menu = menuListObject.getJSONObject(i);
                        // Storing each json item in variable
                        String loginUserId = menu.getString("username");
                        String loginRole = menu.getString("role");
                        menu.getString("location");
                        menu.getString("loggedin");
                        System.out.println(loginRole+ " - Login - "+loginUserId);
                    }          
                }
            } catch (Exception e) {
                e.printStackTrace();
                if (spinner.isShowing())
                    spinner.dismiss();
                showToast(e + "");

            }
        }
    }

    private void showToast(final String message) {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
            }
        });
    }

}




Step2 : Create a Class ConnectionWrapper

import java.io.InputStream;
import java.security.KeyStore;import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.message.BasicHeader;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;

public class ConnectionWrapper {

    public static InputStream downloadFromServer(String url) throws Exception {
        return  new DefaultHttpClient().execute(new HttpGet(url)).getEntity().getContent();
    }

    public static HttpClient getNewHttpClient() {
        try {
            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
            trustStore.load(null, null);

            SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
            sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            HttpParams params = new BasicHttpParams();
            HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
            HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

            SchemeRegistry registry = new SchemeRegistry();
            registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
            registry.register(new Scheme("https", sf, 443));

            ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

            return new DefaultHttpClient(ccm, params);
        } catch (Exception e) {
            return new DefaultHttpClient();
        }
    }   
}         

 

 

Step3 : Create a login layout 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center" 
    android:gravity="center"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="#99676767"
        android:orientation="vertical"
        android:padding="20dp" >

        <EditText
            android:id="@+id/email"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"  
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="10dp"            

            android:hint="email"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:singleLine="true"
            android:textColor="@android:color/black"
            android:textSize="12dp" />

        <EditText
            android:id="@+id/password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"           

            android:hint="password"
            android:inputType="textPassword"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:singleLine="true"
            android:textColor="@android:color/black"
            android:textSize="12dp" />

        <Button
            android:id="@+id/loginButton"
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:layout_gravity="right"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_marginTop="10dp"
            android:layout_weight="1"

            android:gravity="center"
            android:text="Login"
            android:textColor="@android:color/white" />

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_vertical"
            android:gravity="center"
            android:text="Create New Account"
            android:textColor="@android:color/holo_blue_light"
            android:textSize="18sp"
            android:textStyle="bold|italic" />
    </LinearLayout>

</LinearLayout>


Here is the Screenshot of Login Screen





4 comments:

  1. can u show your json link. how data iautomatic insert in email and password? thanks...

    ReplyDelete
  2. i am getting errors in some packages how to remove those errors

    ReplyDelete
  3. Betnet! Sports betting App - vntopbet.com 온카지노 온카지노 우리카지노 계열사 우리카지노 계열사 554bet9ja - Apps judi onlen | Legalbet

    ReplyDelete
  4. Play'n GO Casino: The ultimate mobile casino - KTNV
    The 김천 출장샵 mobile 서울특별 출장마사지 casino is 순천 출장샵 the new home for the biggest slots and roulette 영천 출장마사지 machines and has everything you need for fun and big wins. Check out 밀양 출장마사지 our guide

    ReplyDelete