반응형
//그래들에 추가
// implementation 'com.android.volley:volley:1.1.1'

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    implementation 'com.android.volley:volley:1.1.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
//Mainactivity. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".MainActivity">

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="Hello World!"
        android:textSize="30dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="아이디"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView5" />

    <TextView
        android:id="@+id/id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="TextView"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="비밀번호"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/id" />

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="TextView"
        android:textSize="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

</androidx.constraintlayout.widget.ConstraintLayout>

//TODO RegisterActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".RegisterActivity">

    <EditText
        android:id="@+id/ed_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="150dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:hint="아이디"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.51"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.169" />

    <EditText
        android:id="@+id/ed_pass"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="비밀번호"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="@+id/ed_id"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="@+id/ed_id"
        app:layout_constraintTop_toBottomOf="@+id/ed_id" />

    <EditText
        android:id="@+id/ed_age"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:hint="나이"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="@+id/ed_name"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="@+id/ed_name"
        app:layout_constraintTop_toBottomOf="@+id/ed_name" />

    <EditText
        android:id="@+id/ed_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="8dp"
        android:ems="10"
        android:hint="이름"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="@+id/ed_pass"
        app:layout_constraintHorizontal_bias="0.524"
        app:layout_constraintStart_toStartOf="@+id/ed_pass"
        app:layout_constraintTop_toBottomOf="@+id/ed_pass" />

    <Button
        android:id="@+id/btn_register"
        android:layout_width="0dp"
        android:layout_height="46dp"
        android:layout_marginTop="56dp"
        android:layout_marginEnd="8dp"
        android:text="회원가입"
        app:layout_constraintEnd_toEndOf="@+id/ed_age"
        app:layout_constraintHorizontal_bias="0.512"
        app:layout_constraintStart_toStartOf="@+id/ed_age"
        app:layout_constraintTop_toBottomOf="@+id/ed_age" />

</androidx.constraintlayout.widget.ConstraintLayout>

//loginActivity


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".LoginActivity">

    <EditText
        android:id="@+id/login_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:ems="10"
        android:hint="아이디"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.502"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/login_pass"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="비밀번호"
        android:inputType="textPersonName"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/login_id"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="@+id/login_id"
        app:layout_constraintTop_toBottomOf="@+id/login_id"
        app:layout_constraintVertical_bias="0.056" />

    <Button
        android:id="@+id/login_loginBtn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="로그인"
        app:layout_constraintEnd_toEndOf="@+id/login_pass"
        app:layout_constraintHorizontal_bias="0.504"
        app:layout_constraintStart_toStartOf="@+id/login_pass"
        app:layout_constraintTop_toBottomOf="@+id/login_pass" />

    <Button
        android:id="@+id/login_registerBtn"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="280dp"
        android:text="회원가입"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="@+id/login_loginBtn"
        app:layout_constraintStart_toStartOf="@+id/login_loginBtn"
        app:layout_constraintTop_toBottomOf="@+id/login_loginBtn" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

데이터베이스를 사용해야하기때문에, 여기 <- 를 클릭해서 따라해보자

//회원가입을 위한 RegisterRequest . class

package grocery.gohool.registerloginexample;

import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.HashMap;
import java.util.Map;

//회원가입 눌렀을때 서버통신을 이용하기 위해
public class RegisterRequest extends StringRequest {



    //서버 URL설정 / 고정값 / 심어논 php파일과 연결하는 과정
    final static private String URL = "http://skatpgnsx.dothome.co.kr/Register.php";
    private Map<String, String> map;


    //회원가입요청을 하기위해서 생성자 만들어줌
    public RegisterRequest(String userID, String userPassword, String userName, int userAge, Response.Listener<String> listener){
        super(Method.POST, URL, listener, null);


        map = new HashMap<>();
        map.put("userID", userID);
        map.put("userPassword", userPassword);
        map.put("userName",userName);
        //가라 스트링 ㅋㅋ
        map.put("userAge",userAge + "");
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }
}
//로그인을 위햄 LoginRequest . class

package grocery.gohool.registerloginexample;

import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.HashMap;
import java.util.Map;

//회원가입 눌렀을때 서버통신을 이용하기 위해
public class LoginRequest extends StringRequest {



    //서버 URL설정 / 고정값 / 심어논 php파일과 연결하는 과정
    final static private String URL = "http://skatpgnsx.dothome.co.kr/Login.php";
    private Map<String, String> map;


    //로그인요청을 하기위해서 생성자 만들어줌
    public LoginRequest(String userID, String userPassword, Response.Listener<String> listener){
        super(Method.POST, URL, listener, null);


        map = new HashMap<>();
        map.put("userID", userID);
        map.put("userPassword", userPassword);
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }
}

 Register 회원가입 액티비티

package grocery.gohool.registerloginexample;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

//회원 가입
public class RegisterActivity extends AppCompatActivity {

    private EditText register_id,register_pass,register_age,register_name;
    private Button register_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) { //처음으로 실행되는 생명주기!
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        register_id = (EditText)findViewById(R.id.register_id);
        register_pass = (EditText)findViewById(R.id.register_pass);
        register_age = (EditText)findViewById(R.id.register_age);
        register_name = (EditText)findViewById(R.id.register_name);
        register_btn = (Button)findViewById(R.id.register_registerBtn);

        //회원가입버튼
        register_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //editText에 현재 입력되어있는 값을 가져옴
                String userID = register_id.getText().toString();
                String userPass = register_pass.getText().toString();
                String userName = register_name.getText().toString();
                int userAge = Integer.parseInt(register_age.getText().toString());

                //회원 가입요청에 대한 응답
                Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        //운반할때 포장하고, 풀어주는 / 회원가입 요청을 한다음에 결과값을 JSON오브젝트로 받음(성공여부)
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("successed");
                            if(success){
                                Toast.makeText(getApplicationContext(), "회원등록성공!", Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                                startActivity(intent);
                            } else {
                                Toast.makeText(getApplicationContext(),"회원등록실패ㅠㅠ", Toast.LENGTH_SHORT).show();
                                return; //도돌이표
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }


                    }
                };

                //만든거 담아줌 / 서버로 Volley를 이용해서 요청을 함
                RegisterRequest registerRequest = new RegisterRequest(userID,userPass,userName,userAge,responseListener);
                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
                queue.add(registerRequest);
            }
        });
    }
}

 

로그인 액티비티

package grocery.gohool.registerloginexample;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

public class LoginActivity extends AppCompatActivity {

    private EditText login_id,login_pass;
    private Button login_loginBtn, login_registerBtn;

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


        login_id = (EditText) findViewById(R.id.login_id);
        login_pass = (EditText)findViewById(R.id.login_pass);
        login_loginBtn = (Button) findViewById(R.id.login_loginBtn);
        login_registerBtn = (Button)findViewById(R.id.login_registerBtn);

        //로그인페이지 -> 회원가입페이지
        login_registerBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(LoginActivity.this,RegisterActivity.class);
                startActivity(intent);
            }
        });

        //로그인 요청
        login_loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String userID = login_id.getText().toString();
                String userPass = login_pass.getText().toString();

                Response.Listener<String> responseListener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean sucess = jsonObject.getBoolean("success");
                            if(sucess){
                                String userID = jsonObject.getString("userID");
                                String userPass = jsonObject.getString("userPassword");

                                Toast.makeText(getApplicationContext(), "로그인성공!", Toast.LENGTH_SHORT).show();
                                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                                intent.putExtra("userID",userID);
                                intent.putExtra("userPASS", userPass);
                                startActivity(intent);
                            } else {
                                Toast.makeText(getApplicationContext(), "로그인실패ㅠㅠ", Toast.LENGTH_SHORT).show();
                                return;//도돌이표
                            }


                        } catch (JSONException e) {
                            e.printStackTrace();
                        }


                    }
                };

                LoginRequest loginRequest = new LoginRequest(userID, userPass,responseListener);
                RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
                queue.add(loginRequest);

                //
            }
        });


    }
}

 

 package grocery.gohool.registerloginexample;

 import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

 public class MainActivity extends AppCompatActivity {

    private TextView id,password;

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



        id = (TextView) findViewById(R.id.id);
        password = (TextView) findViewById(R.id.password);

        Intent intent = getIntent();
        String userId = intent.getStringExtra("userID");
        String userPass = intent.getStringExtra("userPass");

        id.setText(userId);
        password.setText(userPass);


    }
}

 

 

완성하긴했지만, 로그인상태가 지속되지 않는다.

내일 새로 빌드하면서 고쳐야겠다.

 

#실행시 로그인이 먼저뜬다면, manifast에서 교체해주면 된다.

반응형

+ Recent posts