2012. 12. 11. 16:48

 

처음에는 ListVIew 을 통해 다음과 같은 화면을 만들려고 했는데,  즐겨찾기의경우 list 마다 동적으로 변경되야 하고 adapter 에서 해줘야 할 일이 많다. 또한  즐겨찾기 특성상 내용을 저장해야 하는데 데이터를 처리하기에는 preference 가 더 효율적일 것 같아서 preference 로 만들어 보기로 했다.

preference.xml

<?xml version="1.0" encoding="UTF-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
   
    <Preference android:layout="@layout/preference_topmenu">
       
       
    </Preference>
   
     <Preference android:title="김태희 님"></Preference>
        <Preference android:title="메인"></Preference>
           
    <PreferenceCategory android:title="즐겨찾기" android:key="addCategory">
        <Preference android:title="공지사항"></Preference>
        <Preference android:title="메모"></Preference>
    </PreferenceCategory>
   
    <PreferenceCategory android:title="설정">
        <Preference android:title="내정보"></Preference>
        <Preference android:title="로그아웃"></Preference>
    </PreferenceCategory>
   
   
</PreferenceScreen>

 

preference_topmenu.xml

<?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/layout">

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="전체" />

        <Button
            android:id="@+id/add_preference"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="즐겨찾기" />

    </LinearLayout>

 

1부 끝 !

Posted by hoonihoon
2012. 12. 7. 16:55

예전에 네이버 API 를 이용해 스터디용 영화검색 app 만들었는데, 망연결 상태도 확인안하고 무조건 server에 요청해서

서버에 응답이 없음이라는 결과를 얻기까지 시간이 많이 걸렸었다.

이제는 요청전에 네트워크 상태를 확인해보자.

ConnectivityManager connectManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);

boolean isMobileOn = connectManager .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting();

boolean isWifiOn = connectManager .getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting();

 

AndroidManifest.xml 에 다음과 같이 추가한다.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

 

실시간으로 받고 싶다면 ?

broadcast 를 만들고 intenr-filter에 해당 코드를 넣어준다.

<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>

 

* 중요한 것은 네트워크 상태를 언제 확인하느냐가 중요하다. server 와 통신이 잦은 어플이라면

요청시에 network check 를 해서 보낼 것인지,  broadcast 로 받아 flag 값을 값을 통해 확인 할 것인지는

server 와 통신하는 양의 차이일 것이다.


 

 

Posted by hoonihoon
2012. 12. 6. 13:34

Gson은 json파일을 객체로 변환할수 있게 해주는 구글 라이브러리이다.

그렇다면 일단 라이브러리를 받아 보자

http://code.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.2-release.zip

Gson을 어떻게 사용하는지 나와있는 google 사이트!

https://sites.google.com/site/gson/gson-user-guide

 

Gson에 관한 이슈모음 사이트! 

http://code.google.com/p/google-gson/issues/detail?id=230

What steps will reproduce the problem?
1. Build a gson with setDateFormat
Date date = new Date();
Gson gson = new GsonBuilder().setDateFormat("MM/dd/yyyy").create();
System.out.println(gson.toJson(date));

What is the expected output? What do you see instead?
Expected is "08/27/2010"
Date results in standard format: "Aug 27, 2010 10:21:32 AM"

이런식으로 자세히 나와있습니다. ^^

Posted by hoonihoon
2012. 12. 6. 11:04
현재 client 와 server 간의 data 송/수신에 대해 알아 보고 있다. 예전부터 궁금했던 것은 client 에서 server 에 요청을 하면 server는 어떤 동작을 취하게 되고 어떻게 client 에게 데이터를 보내주는지 궁금했었다. 아래 방법은 어느 정도 보편화 되있는 방법이다. 하지만 나는 WAS 개발자가 아니라 더 좋은 방법이 있을 수 도 있다. client 개발자에게 어느정도 도움이 될 것으로 생각된다. 쉽게 생각하고 아래를 보자. 

 1. client 에서 url 주소로 server 에 parameter 값을 보낸다. 

2. server는 는 client 에서 받은 parameter로 DB를 쿼리하여 data를 얻는다.

 3. server 는 얻은 데이터를 xml, json 타입으로 만들어 out.print 한다. 

 4. client 는 out.print 된 정보를 가져온다.

 5. client 는 json,xml 방식으로 받은 값으로 요구에 맞게 UI를 만들어 준다. 


 이해가 잘 되지 않았다면 소스 코드를 보자 


 우선 1번 (Android 에서 사용한 방법이다.)

HttpClient client = new DefaultHttpClient();

String url = "http://서버아이피/TestJSONvsXML/JsonSearchResult2.jsp";
   
   HttpPost httpPost = new HttpPost(url);
   List list = new ArrayList();
   list.add(new BasicNameValuePair("search_key", "writer"));
   list.add(new BasicNameValuePair("search_value", "김태훈"));
   UrlEncodedFormEntity ent = new UrlEncodedFormEntity(list, "euc-kr");
   httpPost.setEntity(ent);
   HttpResponse response = client.execute(httpPost);
2번 . (JSP 에서 처리과정)
String search_key = request.getParameter("search_key");
String search_value = request.getParameter("search_value");

client 에서 보낸 key받을 통해 value 값을 얻는다. 그 값을 query를 진행 

 3번. json 타입을 만들어 주는 서버의 모습.

private JSONArray jsonArray;;

ArrayList itemObjectList= new ArrayList();  

while(rs.next()){  
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("id", rs.getString("id"));
    jsonObject.put("title", rs.getString("title"));
    jsonObject.put("content", rs.getString("content"));
    jsonObject.put("writer", rs.getString("writer"));
    jsonObject.put("date", rs.getString("date"));
    itemObjectList.add(jsonObject);

}

jsonArray = JSONArray.fromObject(itemList);

out.print(jsonArray);   //jsp 페이지에 그냥 뿌려준다.

4. 1번에서 이어지는 코드이다. (Android)

HttpResponse response = client.execute(httpPost);  //1번에서 server에 보낸고 응답을 받는다.
HttpEntity reEntity = response.getEntity();

InputStream in =  reEntity.getContent();

 BufferedReader br = new BufferedReader(new InputStreamReader(in , "EUC-KR"));

 int bufferSize = 1024*1024;
      char readBuf [] = new char[bufferSize];
      int resultSize = 0;
      
      StringBuilder sb = new StringBuilder();
      while((resultSize = br.read(readBuf))!= -1){
       if(resultSize == bufferSize){
        sb.append(readBuf);
       }else{
        for(int i = 0; i < resultSize; i++){
         sb.append(readBuf[i]);
        }
       }
      }

5번. Android 에서 에서 JSON 데이터 파싱하기

String str = sb.toString();
      JSONArray jsonArray = new JSONArray(str);
      String[] array = new String[jsonArray.length()];
      for(int i =0; i< jsonArray.length(); i++) {
       StringBuilder sb2 = new StringBuilder();
       sb2.append(jsonArray.getJSONObject(i).getString("id").toString());

      }


Posted by hoonihoon
2012. 12. 6. 10:33

 

Json은 저장, 텍스트정보 교환하기 위한 문법으로 xml 과 비슷하다.

Json은 XML보다 가볍고, 파싱할 때 더 빠르고 쉽게 사용할 수 있다.

 

아래 코드는 간단하게 만들어본 코드인데 대괄호 [] 는 array 를 나타내고

중괄호 {}는 object를 나타낸다.

[

{"content":"맛있다","date":"2012-12-03 11:14:09.0","id":1,"title":"김연아커피","writer":"김태훈"},

{"content":"맛없다","date":"2012-12-04 09:57:39.0","id":4,"title":"맥심커피","writer":"김태훈"}

]

 

위에는 1개 배열에 2개의 object를 포함한다.

 

거두절미 하고 어떻게 사용되는지 보자.

JSONArray jsonArray = new JSONArray("Json 문법으로string 변수");

 for(int i =0; i< jsonArray.length(); i++) {

jsonArray.getJSONObject(i).getString("id").toString();

jsonArray.getJSONObject(i).getString("title").toString();

jsonArray.getJSONObject(i).getString("content").toString();

jsonArray.getJSONObject(i).getString("writer").toString();

jsonArray.getJSONObject(i).getString("date").toString();

}

object를 증가시키면서 key 값으로 해당 value 값으 가져올 수 있다.

 

정말 간단 하지 않은가?

 

간단하게 사용할 때는 위에 방법이 괜찮지만 코드의 확장성과 유지보수를 쉽게 하기 위해서 다른 방법도 생각해 볼 필요가 있다.  다음 시간에 한번 알아 보도록 하자.

 

 

궁금한것은 질문 주세요. 같이 공부해 가요^^

 

 

 

Posted by hoonihoon
2012. 12. 5. 14:27

 

 

 

 http://jsonlint.com/

도움이 되셨다면 댓글 ^^

'Android > Json' 카테고리의 다른 글

JSonArray를 GSON 을 이용해 ArrayList<Object> 로 변경.  (0) 2014.01.02
[3] gson 을 사용하기  (0) 2012.12.06
[2] Json 문법 array? object?  (0) 2012.12.06
Posted by hoonihoon
2012. 11. 30. 17:38

 결론은 글꼴이 잘못 되었다 


해결방법은 ? 

window -> preferences -> General -> Appearnce -> text font 클릭후 오른쪽 메뉴에 edit 을 눌러 글꼴 변경하면 된다.


 권장하는 글꼴은 [Courier new]




'2019년 이전 정리 > Eclipse Skill up' 카테고리의 다른 글

이클립스 색상 변경  (0) 2013.12.09
Eclipse class 파일 보기  (0) 2013.05.21
Posted by hoonihoon
2012. 11. 30. 17:28

Tomcat server 설치 ~ Eclipse 에서 Tomcat server 실행 까지 정리 했습니다.


1. http://tomcat.apache.org/  에서 다운로드

  

 

2.  해당 파일을   C:\apache-tomcat-7.0.33  에 이동한다.

서버를 실행하려면 C:\apache-tomcat-7.0.33/bin/startup.bat 파일을 클릭

3. 이클립스에서 서버를 만들고 실행해보자.

 

WEB 관련 작업을 하려면 이클립스에서 플러그인을 깔아야 겠다. 

help->install new software 에서  위에 처럼 입력한다.

 

위에 리스트에 클릭한 항목을 설치 해준다.

4. 프로젝트 만들기

 

 

 

Tomcat 설치된 곳과 연결 해준다.

 5. 서버 시작하기.

메뉴에 server 가 보인다. 프로젝트를 추가하고 완료를 누른다. 그리고 오른쪽 위에 > 버튼을 클릭하면 서버 실행 .

6. jsp 파일 만들기

생성된 프로젝트에 WebContent 폴더에서 마우스 우측 클릭하고 new -> other -> web -> jsp File  클릭

 

그럼 jsp 파일이 생성되었다. 이제 작업 ㄱㄱ

 

Posted by hoonihoon