반응형
//그래들에 추가
// 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에서 교체해주면 된다.
반응형
'개발언어 > JAVA' 카테고리의 다른 글
안드로이드 파이어베이스 구글아이디 연동 (0) | 2020.12.30 |
---|---|
데이터베이스 MySQL (0) | 2020.12.28 |
안드로이드 하단 메뉴만들기 (0) | 2020.12.26 |
안드로이드 슬라이드메뉴 + fragment (0) | 2020.12.26 |
안드로이드 Fragment (0) | 2020.12.25 |