지난번 예제에서 http통신의 post방식을 이용하여 소스를 작성하였다.
말로 주저리주저리 말하는거보다 소스에 주석을 달아서 설명해 놓겠다.
package com.tistory.sunwoont;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
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.content.Intent;
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 HttpGsonTestActivity extends Activity implements OnClickListener {
private Button btn;
private Button btn1;
private TextView txt;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
txt = (TextView) findViewById(R.id.txt1);
btn = (Button) findViewById(R.id.btn);
btn1 = (Button)findViewById(R.id.btn1);
btn.setOnClickListener(this);
btn1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn:
String url = "http://211.114.147.131/boardfree/GsonEx.json"; //json파일을 웹서버에 넣어놓았음.
try {
String txt1 = "주문 목록\n";
InputStream source = retrieveStream(url);//아래 URL부분을 처리할 Http통신 메소드 호출함.
Reader reader = new InputStreamReader(source);//fromJson은 String형식이 첫 파라메타인데 Reader타입의 클래스 형식도 받아들이나보다....(자세히는 잘 모르겠음;;)
Gson gson = new Gson();// Gson 객체 및 인스턴스 생성.
prod prod = gson.fromJson(reader, prod.class);// 다른
// 클래스(InnerClass)를
// 생성하여
// 그곳에 Json문서를
// 넣음.
for (Item item : prod.getComputer()) {// for문을 돌려서 각각에 맞는 배열
// name의 값을 추
txt1 += "제품명:" + item.getProduct() + ",제조사:"
+ item.getMaker() + ",가격:" + item.getPrice() + "\n";
}
txt.setText(txt1);
} catch (Exception e) {
// TODO Auto-generated catch block
txt.setText(e.getMessage());
}
break;
case R.id.btn1:
Intent intent = new Intent(getApplication(), InternetGsonTest.class);
startActivity(intent);
break;
}
}
private InputStream retrieveStream(String url) {//http통신 처리 부분
DefaultHttpClient client = new DefaultHttpClient();//client객체 인스턴스 생성
HttpPost getRequest = new HttpPost(url);//post방식으로 url를 받아옴
try {
HttpResponse getResponse = client.execute(getRequest);
final int statusCode = getResponse.getStatusLine().getStatusCode();//url의 응답 상태를 얻는다.
if (statusCode != HttpStatus.SC_OK) {//SC_OK의 값은 200인데 200은 리스폰을 제대로 받았다는 뜻이다.
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;
}
public class prod {
private ArrayList<Item> computer;
public ArrayList<Item> getComputer() {
return computer;
}
public void setComputer(ArrayList<Item> computer) {
this.computer = computer;
}
}
// 배열에 있는 내용. 배열명
public class Item {
private String Product;
private String Maker;
private Integer Price;
public String getProduct() {
return Product;
}
public void setProduct(String product) {
Product = product;
}
public String getMaker() {
return Maker;
}
public void setMaker(String maker) {
Maker = maker;
}
public Integer getPrice() {
return Price;
}
public void setPrice(Integer price) {
Price = price;
}
}
}이렇게 작성하면 이전에 로컬에서 바로 String에 Json문장을 넣어서 출력한 것과 같은 결과를 뽑는다.
'Android' 카테고리의 다른 글
setText() 에러 처리하기. (0) | 2011.12.15 |
---|---|
Json 2차원 배열 출력하기(http 통신 Gson 이용) (1) | 2011.11.28 |
JSON을 GSON으로 쓰는 방법. (0) | 2011.11.24 |
안드로이드 패키지 중복 (0) | 2011.11.22 |
MacBook에서 안드로이드 PATH 설정방법 (0) | 2011.11.22 |