Study/Android

MYSQL에서 안드로이드로 데이터 가져오기

Kostrian 2015. 1. 29. 11:28

안드로이드 내부 DB가 아닌 외부 DB를 사용할 필요가 있다. 난 MYSQL을 사용하였다. 게시판을 만들기 위해서 사용 할 DB이기 때문에 테이블 구성은 아래와 같이 하였다.


 


이를 사용할때 안드로이드와 MYSQL이 직접 통신하는 방법은 안드로이드 자체적으로 막혀있기 때문에 PHP를 이용해서 가져와야 한다. 즉 안드로이드 <-> PHP <-> MYSQL 이렇게 할수밖에 없다. MYSQL에서 PHP로의 연결은 PHP부분에서 다루겠다.(http://kostrian.tistory.com/18)


여기서 난 정규 표현식으로 JSON을 사용하였다. 이를 위해서 자바에서 JSONObject와 JSONArray를 사용하였다. 먼저 이 내용은 http://cholol.tistory.com/162 내용을 참고하였다.


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
public class MainActivity extends ActionBarActivity {
    // 데이터를 받아올 PHP 주소
    String url = "http://172.200.110.113:80/android/data.php";
    // 데이터를 보기위한 TextView
    TextView tv;
    // PHP를 읽어올때 사용할 변수
    public GettingPHP gPHP;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        gPHP = new GettingPHP();
 
 
        tv = (TextView)findViewById(R.id.aaa);
        
        gPHP.execute(url);
    }
 
    ...
 
    class GettingPHP extends AsyncTask<String, Integer, String> {
 
        @Override
        protected String doInBackground(String... params) {
            StringBuilder jsonHtml = new StringBuilder();
            try {
                URL phpUrl = new URL(params[0]);
                HttpURLConnection conn = (HttpURLConnection)phpUrl.openConnection();
 
                if ( conn != null ) {
                    conn.setConnectTimeout(10000);
                    conn.setUseCaches(false);
 
                    if ( conn.getResponseCode() == HttpURLConnection.HTTP_OK ) {
                        BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                        while ( true ) {
                            String line = br.readLine();
                            if ( line == null )
                                break;
                            jsonHtml.append(line + "\n");
                        }
                        br.close();
                    }
                    conn.disconnect();
                }
            } catch ( Exception e ) {
                e.printStackTrace();
            }
            return jsonHtml.toString();
        }
 
        protected void onPostExecute(String str) {
            try {
                // PHP에서 받아온 JSON 데이터를 JSON오브젝트로 변환
                JSONObject jObject = new JSONObject(str);
                // results라는 key는 JSON배열로 되어있다.
                JSONArray results = jObject.getJSONArray("results");
                String zz = "";
                zz += "Status : " + jObject.get("status");
                zz += "\n";
                zz += "Number of results : " + jObject.get("num_result");
                zz += "\n";
                zz += "Results : \n";
 
                for ( int i = 0; i < results.length(); ++i ) {
                    JSONObject temp = results.getJSONObject(i);
                    zz += "\tdoc_idx : " + temp.get("doc_idx");
                    zz += "\tmember_idx : " + temp.get("member_idx");
                    zz += "\tsubject : " + temp.get("subject");
                    zz += "\tcontent : " + temp.get("content");
                    zz += "\treg_date : " + temp.get("reg_date");
                    zz += "\n\t--------------------------------------------\n";
                }
                tv.setText(zz);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}
cs


여기서 doInBackgound는 PHP에서 데이터를 읽어오는 역할을 하고 onPostExecute는 가져온 데이터를 이용해 개발자가 원하는 일을 하도록 작성한다.


 


이와같이 결과가 나왔다.


위에서 주의할 점은 URL지정이다. 외부 서버로는 상관이 없지만 로컬호스트로의 접근은 에뮬레이터마다 다른데 나는 블루스택을 사용하였다. 블루스택에서 로컬호스트에 접근하기 위해서는 URL을 127.0.0.1이 아닌 자신의 내부아이피를 입력해야 한다. 예를 들면 192.168.0.104같은 아이피를 통해 접근해야 한다.

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

Fragment  (0) 2015.01.29
DB에서 데이터를 가져와서 게시판 읽는 어플 제작  (0) 2015.01.29
CheckBox & 갤러리 사진 선택  (0) 2015.01.29
Intent & SQLite  (0) 2015.01.29
Custom ListView  (0) 2015.01.29