블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2016. 2. 3. 10:21 Programming/Android

운영체제 : Windows 8.1 64bit

Android Studio : 1.5

작성날짜 : 2016-02-03


참고 : WhiteT's Repository - json 사용하여 파일 읽어오기

       현's 블로그 - 안드로이드 AsyncTask,로딩중 표시, 웹서버 연결 통신


안드로이드 SDK 가 버전업되면서 비동기식으로 서버 연결 통신으로 해야 오류가 나지 않는다.

그리고 다른 클래스로 데이터를 전달하기 위해 핸들러를 사용하였다.



MainActivity.java

private void getData_map(){
   
double start_lat = 34.353022;
    double
start_lon = 125.961035;
    double
end_lat = 37.814617;
    double
end_lon = 127.922094;
   
Location start_location = new Location("");
   
Location end_location = new Location("");
   
start_location.setLatitude(start_lat);
   
start_location.setLongitude(start_lon);
   
end_location.setLatitude(end_lat);
   
end_location.setLongitude(end_lon);

   
parser = new JsonParser(this);

   
parser.getData_map(handler, start_location, end_location, "0", "2000");
}

 

// DatabaseConnector에서 데이터를 전달받기 위한 핸들러

private Handler handler = new Handler(){     public void handleMessage(Message msg){         switch (msg.what){             case -1 : /*error 처리*/   break;             case : String str = msg.obj.toString(); // DatabaseConnector에서 받은 데이터                       JSONObject jObj = null;                       if(str != null){                           try{                               jObj = new JSONObject(str);                           } catch(Exception e){ e.printStackTrace(); }                       }                       if(jObj != null){                           relicdatas = parser.getData_map_parser(jObj);                           for(int i = 0 ; i < relicdatas.size() ; i++){                               adapter.add(relicdatas.get(i));                           }                       }
                      
if(relicdatas.size() != 0){                           textview.setText(relicdatas.size() + "");                       } else {                           textview.setText("relic is null");                       }                   break;           }     } };



전송 받을 Json 양식

{

result_msg : “success”,

data : {

main : {

           type : “thing”,

           o_id : “000001”,

           o_name : “서울 숭례문”,

  o_desc : “ 조선시대 서울도성을 둘러싸고 있던 성곽의 정문으로 원래 이름은 숭례문 이며, 남쪽에 있다고 해서 남대문이라고도 불렀다.",

  image_url : “11634.jpg”,

  video_url : ”1212_324324.wmv”,

  model_url: ”untitle.glb”,

  ref : “한국민족문화대백과사전(00), 한국정신문화연구원,1991”,

  addr : “서울”,

  longitude : “126.23445353”,

             latitude : “37.12315432”,

}

}

}


 

JsonParser.java

SERVER_URL : 데이터를 요청할 서버의 IP나 도메인 주소 및 jsp 파일 경로

START : 각각 매개변수에 해당하는 인자명

String SERVER_URL = "http://121.126.244.161:8080/k-culture_2/jsp/";
String START[] = {"objList.jsp?startX=", "&startY=", "&endX=", "&endY=", "&startYear=", "&endYear="};
public void getData_map(Handler handler, Location start_location, Location end_location, String startYear, String endYear){
    String url =
SERVER_URL + START[0] + start_location.getLongitude() + START[1]
+ start_location.getLatitude() + START[2] + end_location.getLongitude() 
+ START[3] + end_location.getLatitude() + START[4] + startYear + START[5] + endYear;
    try{
        new DatabaseConnecter(handler, "map").execute(url);
    } catch (Exception e){      e.printStackTrace();    }
}
public ArrayList<RelicData> getData_map_parser(JSONObject receiveData) {
    ArrayList<RelicData> relicdatas = new ArrayList<RelicData>();
    RelicData data = null;
    try {
        JSONObject jsonRootObject = receiveData;
        if(jsonRootObject != null){
            String msg = jsonRootObject.getString("result_msg");
            if(msg.equals("success")){
                JSONObject dataObj = jsonRootObject.getJSONObject(
"data");                 int cnt = 0;                 while(dataObj.getJSONObject(cnt + "") != null){ // 별도 처리                     JSONObject getObj = dataObj.getJSONObject(cnt++ + ""); // 별도 처리                     data = new RelicData();
                   
data.setType(getObj.getString("type"));                     data.setId(getObj.getString("o_id"));
                   
data.setTitle(getObj.getString("o_name"));                     double longitude = Double.parseDouble(getObj.getString("longitude"));                     double latitude = Double.parseDouble(getObj.getString("latitude"));                     Location location = new Location("");                     location.setLongitude(longitude);                     location.setLatitude(latitude);                     data.setLocation(location);                     data.setStart_year(getObj.getString("startYear"));                     data.setEnd_year(getObj.getString("endYear"));                     relicdatas.add(data);                 }             }         }     } catch (JSONException e) {e.printStackTrace();}     return relicdatas; }

 

 

DatabaseConnertor.java

public class DatabaseConnecter extends AsyncTask<String, String, String> {
private Handler handler;
private Exception ex;
private String what_parser; 
public
DatabaseConnecter(Handler handler, String what){    this.handler = handler;
  
what_parser = what; }

@Override
  
protected String doInBackground(String... params) { // 비동기식 처리       JSONObject jObj = null;       HttpURLConnection conn = null;
     
InputStream is = null;       BufferedReader br = null;
     
String res = null;       try {
         String url = params[
0];          URL req = new URL(url);          conn = (HttpURLConnection) req.openConnection();
        
conn.setReadTimeout(5000);          conn.setConnectTimeout(5000);          conn.setDoInput(true);          conn.setDoOutput(true);          conn.setRequestProperty("Content-Type", "application/json");
      int
retCode = conn.getResponseCode();
        
is = conn.getInputStream();          br = new BufferedReader(new InputStreamReader(is));          String line;
        
StringBuffer response = new StringBuffer();
         while
((line = br.readLine()) != null) {             response.append(line);             response.append('\r');          }          res = response.toString();       } catch (Exception e) {      e.printStackTrace();       } finally {
        
if(conn != null) { try{conn.disconnect();}catch(Exception e) {}       }          if(is != null){    try{is.close();}catch (Exception e){}       }          if(br != null){    try{br.close();}catch (Exception e){}        }       }       return res;
  
}
  
@Override    protected void onPostExecute(String s) { // Async 작업이 종료 후 호출       if(ex != null){
         Message msg =
handler.obtainMessage();          msg.what = -1;          msg.obj = ex;          handler.sendMessage(msg);       } else{
         Message msg =
handler.obtainMessage();          if(what_parser.equals("map")){             msg.what = 0;          }          msg.obj = s;          handler.sendMessage(msg);       }    } }

 

posted by Kanais