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>
댓글 ( 5)
댓글 남기기