'2017/11/20'에 해당되는 글 1건

728x90

Android Studio 에서 회원가입 폼을 만들고, 회원가입 처리하는 로직을 구현했다.

 

 

1. Layout 구성(activity_register.xml)

더보기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/bg_register"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical"
        android:paddingLeft="20dp"
        android:paddingRight="20dp">

        <EditText
            android:id="@+id/name"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@color/input_register_bg"
            android:hint="@string/hint_name"
            android:inputType="textCapWords"
            android:padding="10dp"
            android:textColor="@color/input_register"
            android:textColorHint="@color/input_register_hint" />

        <EditText
            android:id="@+id/email"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@color/input_register_bg"
            android:hint="@string/hint_email"
            android:inputType="textEmailAddress"
            android:padding="10dp"
            android:textColor="@color/input_register"
            android:textColorHint="@color/input_register_hint" />

        <EditText
            android:id="@+id/password"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@color/input_register_bg"
            android:hint="@string/hint_password"
            android:inputType="textPassword"
            android:padding="10dp"
            android:textColor="@color/input_register"
            android:textColorHint="@color/input_register_hint" />

        <EditText
            android:id="@+id/mobileNO"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@color/input_register_bg"
            android:hint="@string/hint_mobileNO"
            android:inputType="number"
            android:padding="10dp"
            android:textColor="@color/input_register"
            android:textColorHint="@color/input_register_hint" />

        <EditText
            android:id="@+id/telNO"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@color/input_register_bg"
            android:hint="@string/hint_telNO"
            android:inputType="number"
            android:padding="10dp"
            android:textColor="@color/input_register"
            android:textColorHint="@color/input_register_hint" />
        <!-- Login Button -->

        <Button
            android:id="@+id/btnRegister"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="20dip"
            android:background="#ea4c88"
            android:text="@string/btn_register"
            android:textColor="@color/white" />

        <!-- Link to Login Screen -->

        <Button
            android:id="@+id/btnLoginScreen"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="40dip"
            android:background="@null"
            android:text="@string/btn_link_to_login"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:textSize="15dp" />
    </LinearLayout>

</LinearLayout>

 

2. Register.java

- OKHttp 라이브러리를 사용하여 코드를 작성했는데 에러가 발생해서 포기하고

  HttpUrlConnection 을 사용하여 코드를 구현했다. 100% 문제없이 동작하는 코드가 최고다.

package com.tistory.link2me.pdologin;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.tistory.link2me.common.PHPComm;

import okhttp3.MediaType;

public class Register extends AppCompatActivity {
    private static final String TAG = Register.class.getSimpleName();
    private Button btnRegister;
    private Button btnLogin;
    private EditText inputUserName;
    private EditText inputEmail;
    private EditText inputPassword;
    private EditText inputMobileNO;
    private EditText inputTelNO;
    private String userID; // SharedPreferences 저장 목적으로 Class 전역변수 선언

    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    public SharedPreferences settings;

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

        inputUserName = (EditText) findViewById(R.id.name);
        inputEmail = (EditText) findViewById(R.id.email);
        inputPassword = (EditText) findViewById(R.id.password);
        inputMobileNO = (EditText) findViewById(R.id.mobileNO);
        inputTelNO = (EditText) findViewById(R.id.telNO);
        btnRegister = (Button) findViewById(R.id.btnRegister);
        btnLogin = (Button) findViewById(R.id.btnLoginScreen);

        // 등록 버튼
        btnRegister.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                String name = inputUserName.getText().toString().trim();
                String email = inputEmail.getText().toString().trim();
                userID = email;
                String password = inputPassword.getText().toString().trim();
                String mobileNO = inputMobileNO.getText().toString().trim();
                String telNO = inputTelNO.getText().toString().trim();

                if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty() && !mobileNO.isEmpty()) {
                    registerUser(name, email, password, mobileNO, telNO);
                } else {
                    Toast.makeText(getApplicationContext(), "필수사항은 모두 입력하세요!", Toast.LENGTH_LONG).show();
                }
            }
        });

        // Login Screen 으로 Activity 이동
        btnLogin.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(), Login.class));
                finish();
            }
        });

    }

    private void registerUser(String name, String userID, String password, String mobileNO, String telNO) {
        // 전달할 인자들
        Uri.Builder builder = new Uri.Builder()
                .appendQueryParameter("name", name)
                .appendQueryParameter("userID", userID)
                .appendQueryParameter("email", userID)
                .appendQueryParameter("password", password)
                .appendQueryParameter("mobileNO", mobileNO)
                .appendQueryParameter("telNO", telNO);
        String urlParameters = builder.build().getEncodedQuery();
        new getJSONData().execute(Value.IPADDRESS + "/register.php", urlParameters);
    }

    private class getJSONData extends AsyncTask<String, Void, String> {
        ProgressDialog pdLoading = new ProgressDialog(Register.this);

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pdLoading.setMessage("\t회원가입 처리중...");
            pdLoading.setCancelable(false);
            pdLoading.show();
        }

        @Override
        protected String doInBackground(String... params) {
            try {
                return PHPComm.getJson(params[0],params[1]);
            } catch (Exception e) {
                return new String("Exception: " + e.getMessage());
            }
        }

        protected void onPostExecute(String result){
            pdLoading.dismiss();
            showJSONResult(result);
        }
    }

    protected void showJSONResult(String result) {
        if(result.equalsIgnoreCase("1")){
            Toast.makeText(this, "회원가입 완료", Toast.LENGTH_SHORT).show();
            storeUserData();
            startActivity(new Intent(getApplicationContext(), Login.class));
            finish();
        } else if(result.equalsIgnoreCase("-1")){
            Toast.makeText(this, "아이디가 이미 가입되어 있습니다", Toast.LENGTH_SHORT).show();
            inputEmail.clearFocus();
        } else {
            Toast.makeText(this, "회원 등록에 문제가 발생했습니다", Toast.LENGTH_SHORT).show();
        }
    }

    private void storeUserData(){
        settings = getSharedPreferences("settings", Activity.MODE_PRIVATE);
        SharedPreferences.Editor editor = settings.edit();
        editor.putString("userID", userID);
        editor.putBoolean("autologin", true);
        editor.commit();
    }
}

 

3. PHP 코드 작성(register.php)

<?php
extract($_POST);
if(isset($_POST) && !empty($_POST)) {
    require_once '../config/config.php';
    $c = new MemberClass();

    // 동일한 userID 등록되어 있는지 체크
    if ($c->isUserExisted($userID)) { // E-Mail 이 key value
        // user already existed
        echo -1;
    } else {
        // 사용자 등록
        $telNO = preg_replace("/[^0-9]/", "", $telNO);
        $mobileNO = preg_replace("/[^0-9]/", "", $mobileNO);
        $user = $c->storeUser($userID, $name, $email, $password, $telNO, $mobileNO);
        if ($user) { // 사용자 등록 성공
            echo 1;
        } else {
            echo 0;
        }
    }
} else { // 입력받은 데이터에 문제가 있을 경우
    echo -2;
}
?>
 

 

values.zip
다운로드

 

strings.xml 과 colors.xml 파일 두개가 포함되어 있다.

 

회원가입 테이블에 데이터가 저장되어 있는 걸 확인할 수 있다.

 

 

회원가입과 로그인처리는 완벽하게 처리되도록 구현한 소스코드를 그대로 오픈 것이니 복사해서 이용하면 된다.

AndroidManifest.xml 파일에 Register Activity 추가된 것을 추가해줘야 에러가 발생하지 않는다.소소한 에러를 잡아가면서 해보는게 좋을거 같아서 관련으로 수정된 부분은 첨부하지 않는다.

 

도움이 되셨다면 댓글 달아주세요.

블로그 이미지

Link2Me

,