안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
설치방법이나 기본 구성은 다른 블로그에도 많이 나와 있으니 앞에 쉬운부분은 다 자르고
이번 시간에는 다른 블로그에는 잘 없는 제가 독학하느라
꽤 오랜시간 애먹었던 회원가입과 로그인에 대해 공부하겠습니다.
먼저 기본적으로 안드로이드 프로그래밍에는 JAVA 파일과 XML 파일이 있습니다.
XML 파일은 디자인을 하는 파일이고 JAVA는 실제 실행이 되는 파일입니다.
XML 파일과 디자인 화면입니다.
==============================================================================
이름 :activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이름 :"
android:id="@+id/m_name"
android:textSize="25dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editName"
android:hint="이름을 입력해주세요."
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="나이 :"
android:id="@+id/m_age"
android:textSize="25dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editAge"
android:hint="나이을 입력해주세요."
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="학번 :"
android:id="@+id/m_num"
android:textSize="25dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number"
android:ems="10"
android:id="@+id/editNum"
android:hint="학번을 입력해주세요."
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="학과 :"
android:id="@+id/m_major"
android:textSize="25dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/editMajor"
android:hint="학과를 입력해주세요."
android:gravity="center" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<Button
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="가입하기"
android:id="@+id/Button1"
android:onClick="Button1OnClicked" />
<Button
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="조회하기"
android:id="@+id/Button2"
android:onClick="Button2OnClicked" />
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center">
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:gravity="center"
android:hint="이름을 입력하세요" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:gravity="center"
android:hint="학과를 입력하세요." />
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="로그인"
android:id="@+id/button"
android:textSize="50dp"
android:onClick="login" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:id="@+id/scrollView" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
</ScrollView>
//// 이곳에 가입한 사람들 정보가 보여집니다.
</LinearLayout>
</LinearLayout>
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
이름 :newpage.xml
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="로그인 되었습니다. 축하합니다."
android:id="@+id/textView2" />
</LinearLayout> 간단한게 텍스트만 사용하였습니다.
JAVA 파일입니다.
-------------------------------------------------------------------------
이름 : MainActivity.java
package com.example.newdatabase;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
EditText editName, editAge, editNum, editMajor;
TextView textView;
String databaseName;
SQLiteDatabase database;
String tableName;
String Name;
String Age;
String Num;
String Major;
String Gender;
EditText editText;
EditText editText2;
String Text;
String Text2;
CustomerDatabaseHelper databaseHelper;
String Cname;
String Cmajor;
// String resultText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText)findViewById(R.id.editText);
editText2 = (EditText)findViewById(R.id.editText2);
editName = (EditText)findViewById(R.id.editName);
editAge = (EditText)findViewById(R.id.editAge);
editNum = (EditText)findViewById(R.id.editNum);
editMajor = (EditText)findViewById(R.id.editMajor);
textView = (TextView)findViewById(R.id.textView);
databaseName = "member";
try{
if(database==null){
//database = openOrCreateDatabase(databaseName, Context.MODE_PRIVATE,null);
databaseHelper = new CustomerDatabaseHelper(getApplicationContext(),databaseName,null,1);
database = databaseHelper.getWritableDatabase();
Toast.makeText(this,"DB :"+databaseName+"생성",Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
e.printStackTrace();
}
tableName = "JOIN";
try{
// tableName = "join";
if (database != null) {
database.execSQL("CREATE TABLE if not exists " + "PORODUCT" + "(" +
"_id integer PRIMARY KEY autoincrement," +
"name text," +
"age integer," +
"num integer," +
"major text" +
")");
Toast.makeText(this,"table :" + "PORODUCT" + "생성",Toast.LENGTH_SHORT).show();
}
}catch (Exception e){
e.printStackTrace();
}
}
public void Button1OnClicked(View v){
try {
if(tableName==null){
// tableName = "join";
}
if(database!=null){
Name = editName.getText().toString();
Age = editAge.getText().toString();
Num = editNum.getText().toString();
Major= editMajor.getText().toString();
database.execSQL("INSERT INTO " + "PORODUCT" + "(name, age, num, major) VALUES" +
"("+"'"+Name+"'"+","+Age+","+Num+","+"'"+Major+"'"+");");
println("데이터를 추가했습니다.");
}
else {
println("데이터베이스를 먼저 열어야합니다.");
}
}catch (Exception e){
e.printStackTrace();
}
}
public void Button2OnClicked(View v){
try {
if(tableName==null){
// tableName = "join";
}
if(database!=null){
Cursor cursor =database.rawQuery("SELECT name, age, Num, major FROM " + "PORODUCT", null);
int count = cursor.getCount();
println("결과 레코드 갯수 :"+count);
for(int i=0;i<count;i++){
cursor.moveToNext();
String name = cursor.getString(0);
int age = cursor.getInt(1);
int num = cursor.getInt(2);
String major = cursor.getString(3);
//String gender = cursor.getString(4);
println("레코드 # "+i+": "+name+","+age+","+num+","+major);
}
cursor.close();
println("데이터를 조회했습니다.");
}
else {
println("데이터베이스를 먼저 열어야합니다.");
}
}catch (Exception e){
e.printStackTrace();
}
}
private void println(String data){
textView.append(data+"\n");
}
class CustomerDatabaseHelper extends SQLiteOpenHelper {
CustomerDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onOpen(SQLiteDatabase database) {
super.onOpen(database);
Toast.makeText(getApplicationContext(),"Helper의 onOpen()호출됨",Toast.LENGTH_LONG).show();
}
@Override
public void onCreate(SQLiteDatabase database) {
Toast.makeText(getApplicationContext(),"Helper의 onCreate()호출됨",Toast.LENGTH_LONG).show();
//createTable(database);
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
Toast.makeText(getApplicationContext(),"Helper의 onUpgrade()호출됨 :"+oldVersion+" => "+newVersion,Toast.LENGTH_LONG).show();
// changeTable(database);
}
}
public void login(View v) {
if (database != null) {
Cursor cursor = database.rawQuery("SELECT name, major FROM " + "PORODUCT", null);
cursor.moveToNext();
Cname = cursor.getString(0);
Cmajor = cursor.getString(1);
Text = editText.getText().toString();
Text2 = editText2.getText().toString();
if (Text.equals(Cname) && Text2.equals(Cmajor)) {//내장디비인 SQLite에서 가져온 이름, 전공과 입력한 이름, 전공을 비교하여 같으면 로그인이 되게한다.
Intent intent = new Intent(getApplication(), NewPage.class);
startActivity(intent);
Toast.makeText(getApplication(),Text+"님 환영합니다.",Toast.LENGTH_SHORT).show();
finish();
}
cursor.close();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
---------------------------------------------------------------------------
이름 : NewPage.java
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
package com.example.newdatabase;
import android.os.Bundle;
/**
* Created by 박성균 on 2015-05-13.
*/
public class NewPage extends MainActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.newpage);
}
}
물론 디비이름과 테이블이름은 저처럼 하지않고 입력받아서 만들어도 상관없습니다. 저는 앱이 실행됨과 동시에 디비와 테이블이 만들어지게 하였습니다.
회원가입로그인을 공부하러 오신분들이라면 여기있는 대부분의 코드들은 다 이해하시리라 믿습니다.
제가 해결하지 못한 한가지가 있다면 처음 저장한 정보로만 로그인이 된다는 점입니다....ㅎㅎ
혹시 해결 방법을 아시는 분은 댓글로 알려주세요~~
'안드로이드' 카테고리의 다른 글
안드로이드 api 23이상 퍼미션 권한 주는 방법 (0) | 2017.03.10 |
---|---|
안드로이드 갤러리 사진가져오기 (2) | 2017.03.10 |
안드로이드 SQLite 회원가입과 로그인 확장 (11) | 2017.03.10 |
안드로이드 SQLite를 이용한 로그인 문제 해결 (0) | 2017.03.10 |
자바 에러 java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() (1) | 2017.03.09 |