안드로이드

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>

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

사물에 대한 관점을 바꾼다면, 모든 일이 즐거워질 것이다. 일에 흥미를 가지면, 회사에 이익이 되고 윗사람이 기뻐할 것이다. 그건 그렇다 치고 실익이란 점에서 생각해도 일에 흥미를 가지면 인생의 즐거움이 두 배로 된다. 일어나 있는 시간의 반은 일을 하고 있으므로 일이 즐겁지 않으면, 그 인생은 불행하게 된다. 일이 재미있게 되면 고뇌를 잊게 되고, 어느

댓글 ( 4)

댓글 남기기

작성