안드로이드

 

 

 

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 데이터로 가공하기

 

쿼리 -  mysql

create table book (
	book_code Integer AUTO_INCREMENT  primary key, 
	book_name varchar(50) not null,
	press varchar(50) not null,
	price Integer default 0,
	amount Integer default 0

);	


insert into book values ( null, 'java', '삼양', 30000, 10);
insert into book values (null, 'jsp', '영진', 35000, 20);
insert into book values ( null,'spring', '길벗', 25000, 30);
insert into book values (null, 'oracle', '한빛', 20000, 15);
insert into book values (null, 'android', '가메', 40000, 25);	

 

pom.xml 에 라이브러리 추가

 

DAO 및 DTO , 서비스 클래스 를 만든다.  바로 앞 블로그 xml 참조.

 

class BookController

 

package com.macaronics.www.sample.Controller;

import java.util.List;

import javax.inject.Inject;

import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.macaronics.www.sample.dto.BookVO;
import com.macaronics.www.sample.service.BookService;

@Controller
public class BookController {
	
	@Inject
	private BookService bookService;

	private final static Logger logger=LoggerFactory.getLogger(BookController.class);
	
		
	
	
	@SuppressWarnings({ "unchecked", "null" })
	@ResponseBody
	@RequestMapping(value="/json.do" , produces="application/json; charset=utf-8")
	public JSONObject json(){
		JSONObject jsonMain=new JSONObject();//json 객체
//[{변수명:값, 변수명:값}]
//[sendData: ]		
		List<BookVO> items=bookService.bookList();
		JSONArray jArray=new JSONArray();//json 배열
		
		for(int i=0; i<items.size(); i++){
			BookVO vo =items.get(i);
			JSONObject row=new JSONObject();
// json객체.put("변수명", 값)			
			row.put("book_code", vo.getBook_code());
			row.put("book_name", vo.getBook_name());
			row.put("press", vo.getPress());
			row.put("price", vo.getPrice());
			row.put("amount", vo.getAmount());
			//json배열.add(인덱스, json 객체)
			jArray.add(i, row);
		}
		jsonMain.put("books", jArray);
		return jsonMain;
	}
	
	
	
	
	
	
	
}






 

2. 안드로이드 xml Parse

 

 

class JsonActivity
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.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.example.choi.ex05_network.dto.BookVO;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class JsonActivity extends AppCompatActivity
        implements Runnable{

    //1. 변수 선언
    ListView list1;
    List<BookVO> items;

    final String url_address="http://192.168.0.2:2424/json.do";



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.json);
        //2.위젯 연결
        list1=(ListView)findViewById(R.id.list1);

        items=new ArrayList<>();

        //백그라운드 스레드
       Thread th =new Thread(this);
       th.start();
    }

    // Alt+Insert implement Methods
    @Override
    public void run() {

        try {
    //httpclient-4.2.2.jar httpcore-4.2.2.jar
     //Apache HttpClient » 4.2.2
     //Apache HttpCore » 4.2.2
    //app/libs에 추가
//Url 로 데이터를 가져 올수 있으나 HttpClient 를 사용하는 이유는
// 데이터를 보내고 요청하는 작업을 수행할 수 있게 하기 위해서 있다.
// 여기서는 post 방식으로 요청을 했다. 보내는 데이타는 현재 코드에는 없다.

            HttpClient http=new DefaultHttpClient();
            HttpPost httpPost=new HttpPost(url_address);
//http클라이언트.execute(httppost객체) => 웹 서버에 데이터 전달
//결과(json)가 response 넘어 옴
            HttpResponse response=http.execute(httpPost);
//body 에 json 스트링이 넘어 옴
            String body = EntityUtils.toString(response.getEntity());
// string => JSONObject 로 변환
            JSONObject jsonObj=new JSONObject(body);
//json객체.get("변수명")
            JSONArray jArray=(JSONArray)jsonObj.get("books");
            for(int i=0; i<jArray.length(); i++){
                //json배열.getJSONObject(인덱스)
                JSONObject row =jArray.getJSONObject(i);
                BookVO vo =new BookVO();
                //json객체.get자료형("변수명")
                vo.setBook_code(row.getInt("book_code"));
                vo.setAmount(row.getInt("amount"));
                vo.setBook_name(row.getString("book_name"));
                vo.setPrice(row.getInt("price"));
                vo.setPress(row.getString("press"));
                items.add(vo);

            }

        }catch (Exception e){

            e.printStackTrace();
            Log.e("eroor", e.getMessage());
        }
        //핸들러에게 메시지 요청
        handler.sendEmptyMessage(0);

    }

    //핸들러
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String[] str =new String[items.size()];
            for(int i=0; i<str.length; i++){
                BookVO vo =items.get(i);
                str[i]=(i+1)+". "+ vo.getBook_name()+" [ " +
                        vo.getPress()+" ," +
                        vo.getPrice()+ " , " +
                        vo.getAmount() +" ] " ;
            }

            //아답터 생성
            ArrayAdapter<String> adapter=new ArrayAdapter<String>(
                JsonActivity.this, android.R.layout.simple_list_item_1, str);
            list1.setAdapter(adapter);
        }
    };






}







 

json.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/json"
    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.JsonActivity">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:id="@+id/list1" />
</RelativeLayout>

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

행복할 때의 미덕은 자제이고 역경에 처했을 때의 미덕은 인내이다. -프란시스 베이컨

댓글 ( 5)

댓글 남기기

작성