1.스프링에서 데이터를 JSON 형식으로 가공 한다.
2.안드로이드에서 가공한 JSON 을 parse 해서 보여준다.
스르링 라이브러리 추가
<!-- 안드로이드 연동 xml - json -->
<!-- https://mvnrepository.com/artifact/org.jdom/jdom -->
<!-- xml 생성 -->
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.2</version>
</dependency>
<!-- 구글 JSON 라이브러리 -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<!-- <dependency> 상단에 추가 json 객체 생성
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
-->
<!-- jackson-databind는 상단에 추가 하였음 -->
<!-- jackson-databind 는 @ResponseBody json 타입으로 리턴하기 위한것 -->
안드로이드 라이브러리 추가
compile files('libs/httpclient-4.2.2.jar')
compile files('libs/httpcore-4.2.2.jar')
버전을 http://mvnrepository.com/ 에서 찾아 jar 파일을 다운로드 한다.
프로젝트 클릭후 libs 에 카피 한다.
Studio Library + 안드로이드 스튜디오 라이브러리 추가 방법 http://ggari.tistory.com/421
1. 스프링 에서 JSON 데이터로 가공하기
class AndroidLoginController
package com.macaronics.www.sample.Controller;
import java.util.Date;
import javax.inject.Inject;
import javax.servlet.http.Cookie;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.macaronics.www.member.model.dto.MemberDTO;
import com.macaronics.www.member.service.MemberService;
import com.macaronics.www.util.passwordencoder.PasswordEncoding;
@Controller
public class AndroidLoginController {
private final static Logger logger=LoggerFactory.getLogger(AndroidLoginController.class);
@Inject
private MemberService memberService;
@Inject
private PasswordEncoding passwordEncoding;
@SuppressWarnings("unchecked")
@ResponseBody
@RequestMapping(value="/andoridLogin", produces="application/json; charset=utf-8")
public JSONObject androidLogin(String email, String userpw){
JSONObject json=new JSONObject();
MemberDTO dto =new MemberDTO();
dto.setEmail(email);
dto.setUserpw(userpw);
//이메일 체크 후 정보를 가져 온다.
MemberDTO member =memberService.checkLogin(dto);
if(member !=null){
logger.info("DB 암호 해독 패스워드 " + member.getUserpw());
logger.info("유저 아이디 " + member.getUserid());
// 널이 아니면 이메일이 존재하는 것이다. 따라서 등록된 가입자 이다.
//패스워드 매치를 통해 다시 비밀번호 확인 한다
if(passwordEncoding.matches(dto.getUserpw(), member.getUserpw())){
// 로그인 성공 - 로그인이 가능한 유저 확인 정보 가져오기
MemberDTO loginUser = memberService.viewMember(member.getUserid());
json.put("message", loginUser.getUsername() + " 님 환영합니다.");
json.put("userid", loginUser.getUserid());
json.put("username", loginUser.getUsername());
json.put("email", loginUser.getEmail());
json.put("tel", loginUser.getTel());
}else{
//비밀 번호 오류
json.put("message", "비밀 번호가 틀립니다.");
}
}else{
//등록 되지 않은 이메일
json.put("message", "등록 되지 않은 이메일 입니다.");
}
return json; //json 객체 리턴
}
}
암호화 설정은 블로그에 있다.
성공시 반환되 json 값
{ tel: "010-2222-5555", message: "최준호 님 환영합니다.", userid: "braverokmc", email: "braverokmc79@gmail.com", username: "최준호" } |
2. 안드로이드 JSON Parse
class MemberDTO
package com.example.choi.ex05_network.dto;
/**
* Created by choi on 2017-02-23.
*/
public class MemberDTO {
private String userid;
private String email;
private String username;
private String tel;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public String toString() {
return "MemberDTO{" +
"userid='" + userid + '\'' +
", email='" + email + '\'' +
", username='" + username + '\'' +
", tel='" + tel + '\'' +
'}';
}
}
class LoginActivity
package com.example.choi.ex05_network;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.example.choi.ex05_network.dto.MemberDTO;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import java.util.ArrayList;
public class LoginActivity extends AppCompatActivity
implements Runnable{
//1.변수 선언
EditText editEmail, editPw;
Button btnLogin;
TextView txtResult;
String message;
MemberDTO dto;
final String url_address="http://192.168.0.2:2424/andoridLogin";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//2.위젯 연결
editEmail=(EditText)findViewById(R.id.editEmail);
editPw=(EditText)findViewById(R.id.editPw);
btnLogin=(Button)findViewById(R.id.btnLogin);
txtResult=(TextView)findViewById(R.id.txtResutl);
dto=new MemberDTO();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//3. 백그라운드 스레드 생성
Thread th =new Thread(LoginActivity.this);
th.start();
}
});
}
//백그라운드 스레드가 사용하는 method
public void run(){
//사용자의 입력값
String email=editEmail.getText().toString();
String userpw= editPw.getText().toString();
try {
HttpClient http = new DefaultHttpClient();
// NameValuePair 변수명과 값을 함께 저장하는 객체
ArrayList postData = new ArrayList<>();
//post 방식으로 전달할 값들
postData.add(new BasicNameValuePair("email", email));
postData.add(new BasicNameValuePair("userpw", userpw));
//url encoding이 필요한 값들(한글, 특수문자)
UrlEncodedFormEntity request
= new UrlEncodedFormEntity(postData, "utf-8");
HttpPost httpPost = new HttpPost(url_address);
//post 방식으로 전달할 데이터 설정
httpPost.setEntity(request);
//post 방식으로 전송, 응답결과는 response로
HttpResponse response=http.execute(httpPost);
//response text를 스트링으로 변환
String body=EntityUtils.toString(response.getEntity());
// 스트링을 json으로
JSONObject obj=new JSONObject(body);
final String message= obj.getString("message");
if(message.contains("님 환영합니다.")){
dto.setUserid(obj.getString("userid"));
dto.setEmail(obj.getString("email"));
dto.setUsername(obj.getString("username"));
dto.setTel(obj.getString("tel"));
}
// 백그라운드 스레드에서 메인UI를 변경할 경우 사용
runOnUiThread(new Runnable() {
@Override
public void run() {
txtResult.setText(message);
if(message.contains("님 환영합니다.")){
txtResult.append(" ");
txtResult.append(""+dto.getUserid()+" , "+dto.getEmail() +
" ," + dto.getUsername()
+" , " + dto.getTel());
}
}
});
}catch(Exception e){
e.printStackTrace();
}
}
//핸들러
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
txtResult.setText(message);
}
};
}
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_login"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.choi.ex05_network.LoginActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:ems="10"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:id="@+id/editEmail"
android:hint="이메일을 입력하세요" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:layout_below="@+id/editEmail"
android:id="@+id/editPw"
android:layout_alignParentStart="true"
android:hint="비밀번호를 입력하세요" />
<Button
android:text="로그인"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editPw"
android:layout_alignParentStart="true"
android:layout_marginTop="11dp"
android:id="@+id/btnLogin" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnLogin"
android:layout_alignParentStart="true"
android:layout_marginTop="28dp"
android:id="@+id/txtResutl"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" />
</RelativeLayout>
댓글 ( 4)
댓글 남기기