본문 바로가기

Android

Json 2차원 배열 출력하기(http 통신 Gson 이용)

이전 포스트에 http통신을 이용하여 웹서버에 있는 json파일을 파싱하여 출력하는 것을 했었다. 이번에는 2차원 배열이 있는

Json파일을 출력해보겠다.(솔찍히 포스트 할 가치가 있을까 했지만 그냥 복습하는겸....)

별다를 것 없이 보통 2차원배열 데이터를 출력할 때에는 이중 반복문을 쓰는 것을 다들 알 것이다. 이전 소스에 그냥 반복문

하나 더 써준 것과 클래스 하나를 더 만들어 준 것밖에 없다. 이번에는 InnerClass를 사용하지 않고 따로 파일을 만들어서 사용

했다.

<IntetnetGsonTest.java>

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;


import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;


import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.Window;

import android.widget.Button;

import android.widget.TextView;


import com.google.gson.Gson;


public class InternetGsonTest extends Activity implements OnClickListener {

private Button btn;

private TextView text1;

private TextView text2;

private TextView text3;


@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

setContentView(R.layout.internetgson);


text1 = (TextView) findViewById(R.id.textView1);

text2 = (TextView) findViewById(R.id.textView2);

text3 = (TextView) findViewById(R.id.textView3);

btn = (Button) findViewById(R.id.button1);


btn.setOnClickListener(this);

}


@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.button1:

String url = "http://211.114.147.131/boardfree/ExportGsonEx.json";


try {


String txt1 = null;

String txt2 = null;

// String txt3 = null;


InputStream source = retrieveStream(url);

Reader reader = new InputStreamReader(source);


Gson gson = new Gson();// Gson 객체 및 인스턴스 생성.

Status status = gson.fromJson(reader, Status.class);


for (Layout layout : status.getPages()) {

txt2 += "articales :"+layout.getArticles()+"\n Layout : "+layout.getLayout()

+"\n halfLayout :"+layout.getHalfLayout();

for (Article article : layout.getArticles()) {

txt1 += "articleSeq :" + article.getArticleSeq()

+ "\n title :" + article.getTitle() + "\n url :"

+ article.getUrl() + "\n thumbnailUrl :"

+ article.getThumbnailUrl() + "\n type :"

+ article.getType() + "\n rank :"

+ article.getRank();

}

}

text1.setText(txt1);

text2.setText(txt2);

// text3.setText(txt3);

} catch (Exception e) {

text1.setText(e.getMessage());

}

break;

}

}


private InputStream retrieveStream(String url) {


DefaultHttpClient client = new DefaultHttpClient();

HttpPost getRequest = new HttpPost(url);


try {

HttpResponse getResponse = client.execute(getRequest);

final int statusCode = getResponse.getStatusLine().getStatusCode();// url의

// 응답

// 상태를

// 얻어


if (statusCode != HttpStatus.SC_OK) {

Log.w(getClass().getSimpleName(), "Error " + statusCode

+ " for URL " + url);

return null;


}

HttpEntity getResponseEntity = getResponse.getEntity();

return getResponseEntity.getContent();


} catch (IOException e) {

getRequest.abort();// http 요청을 중

Log.w(getClass().getSimpleName(), "Error for URL " + url, e);

}

return null;

}



<Status.java> 

import java.util.ArrayList;


public class Status {

private ArrayList<Layout> pages;
 

public ArrayList<Layout> getPages() {

return pages;

}

public void setPages(ArrayList<Layout> pages) {

this.pages = pages;

}

}

<Layout.java>

import java.util.ArrayList;


public class Layout {

private String layout;

private String halfLayout;

private ArrayList<Article> articles;


public String getLayout() {

return layout;

}


public void setLayout(String layout) {

this.layout = layout;

}


public String getHalfLayout() {

return halfLayout;

}


public void setHalfLayout(String halfLayout) {

this.halfLayout = halfLayout;

}


public ArrayList<Article> getArticles() {

return articles;

}


public void setArticles(ArrayList<Article> articles) {

this.articles = articles;

}

 <Article.java>

public class Article {

private Integer articleSeq;

private String title;

private String url;

private String type;

private Integer rank;

private String thumbnailUrl;


public Integer getArticleSeq() {

return articleSeq;

}


public void setArticleSeq(Integer articleSeq) {

this.articleSeq = articleSeq;

}


public String getTitle() {

return title;

}


public void setTitle(String title) {

this.title = title;

}


public String getUrl() {

return url;

}


public void setUrl(String url) {

this.url = url;

}


public String getType() {

return type;

}


public void setType(String type) {

this.type = type;

}


public Integer getRank() {

return rank;

}


public void setRank(Integer rank) {

this.rank = rank;

}


public String getThumbnailUrl() {

return thumbnailUrl;

}


public void setThumbnailUrl(String thumbnailUrl) {

this.thumbnailUrl = thumbnailUrl;

}




참 쉽죠잉??(개인적으로 Json보다 Gson이 편한것 같다...자주 써서 그런가....)

그리고 포스팅 할때 왜 스샷을 첨부하지 않는가에 대해 궁금하신 분이 계실거 같은데...

개발을 맥북에서 하다보니 스샷뜨는법을 몰라서....<-;;;

알게되면 스샷도 같이 첨부하겠습니다.(__)