달달한 스토리

728x90
반응형

 

한 주가 지나갔다.

 

이제는 초조하고, 마음이 답답해서 하루빨리 이곳을 나가고 싶지만,

 

침착해야 한다.

 

거의 앱은 완성되었고, 아직 나는 부족하다.

 

하지만, 더 배우기 위해서는 현장에 나가보고 사람들도 만나봐야 한다고 생각한다.

 

오늘은 만들고 있는 앱에 일기 기능을 위해서

 

한 칼럼에 내용을 모두 가져오는 php구문과 그 값을 안드로이드 스튜디오에서 받는 법을

 

쓸 생각이다.

 


해결법

<?php
    $con = mysqli_connect("서버 ip", "데이터베이스 아이디", "비번", "데이터베이스");
    mysqli_query($con,'SET NAMES utf8');

    $num = $_POST["num"];

  	$startdate = [];
	$query = "SELECT startdate FROM  `Diary$num`";
	$result = mysqli_query($con, $query);

	$response["success"] = false;

	while ($row = mysqli_fetch_array($result)) {
	$response["success"] = true;
    $response[] = $row["startdate"];
	}

echo json_encode($response);

?>

 

나 같은 경우는 각 회원마다 고유의 번호(num)를 주고,

 

그 번호가 붙어있는 개인의 Diary테이블을 만들어서

 

일기 내용을 따로 저장하는 법을 사용했다.

 

그 과정에서

 

 

일기를 쓴 날짜를 모두 가져와야 할 상황이 생겼다.

 

그래서 sql문을 $query = "SELECT startdate FROM  `Diary$num`";

 

이런 식으로 작성했다.

 

Diary$num 테이블에 startdate값을 모두 받는 sql문이다.

 

그러고 나서 값들에 수만큼 반복문을 이용해야 하는데,

 

이 부분에서 해결할 수 있다.

 

while ($row = mysqli_fetch_array($result)) {
	$response["success"] = true;
    $response[] = $row["startdate"];
	}

 

위에서 작성한 쿼리 문과 나의 데이터베이스 정보들을 인자로 넣어주고,

 

응답을 배열 형태로 담아서 보낸다.

 

이렇게 보내면, 칼럼에 있는 수만큼 칼럼 값이

 

배열 형태로 넘어가게 된다.

 

그렇다면,

 

안드로이드 스튜디오에선 어떤 식으로 값을 전달받을까?

 

처음에는 GSON으로 값을 파싱 하여 받는 법을 생각했는데,

 

기존에 그냥 사용하던 방법으로 JSONObject에서

 

getString으로 데이터를 받았다.

 

 public void getDBDiaryDateGreen() {
        Response.Listener<String> responseListener = new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    Log.d("어레이", String.valueOf(jsonObject));
                    boolean success = jsonObject.getBoolean("success");
                    if (success) {
                        int length = jsonObject.length();
                        for(int i = 0; i <= length; i++) { //있는 수만큼 반복문
                            String date = jsonObject.getString(String.valueOf(i));
                            Log.d("이제이거", String.valueOf(jsonObject.length()));
                            Log.d("이제이거", date);
                            //날짜를 년월일로 나누어서
                            String year = date.substring(0,4); //받아온 연도 ex)2021
                            String month = date.substring(5,7); //받아온 달 ex)02
                            String dayofMonth = date.substring(8,10); //받아온 일 수 ex)25
                            diaryWriteDate(year, month, dayofMonth); //있는 수만큼 날짜 초록색으로 만들기
                        }
            
                    } else {//실패
                        Toast.makeText(getContext(), "인터넷 연결을 확인해주세요.", Toast.LENGTH_SHORT).show();
                        return;
                    }


                } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getContext(), "인터넷 연결을 확인해주세요.", Toast.LENGTH_SHORT).show();
                    return;
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(getContext(), "인터넷 연결을 확인해주세요.", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        };

        getDiaryDate_Request getDiaryDate_request = new getDiaryDate_Request(HomeMain.num, responseListener);
        RequestQueue queue = Volley.newRequestQueue(getContext());
        queue.add(getDiaryDate_request);
    }

나 같은 경우는

 

달력에다가 여러 날짜를 넣어야 하는 경우 여서

 

 

반복문을 통해 jsonobject에 들어있는 값(칼럼 개수)만큼(length) 여러 번 값을 실행하여

 

날짜 값을 보냈다.

 

getString에서 배열을 가져올 때, 인자로 int값을 주되

 

String으로 파싱 하여 입력하면 된다.

 

그러하면

 

이런 식으로 칼럼 값이 순서대로 넘어오게 된다.

 

볼리 라이브러리 요청 클래스도 적어두겠다.

 

public class getDiaryDate_Request extends StringRequest  {



    //서버 url 설정(php파일 연동)
    final static  private String URL="아이피주소//getDiaryDate.php";
    private Map<String,String> map;

    public getDiaryDate_Request(int num, Response.Listener<String>listener){
        super(Method.POST,URL,listener,null);

        map=new HashMap<>();
        map.put("num", num+"");
    }

    @Override
    protected Map<String, String> getParams() throws AuthFailureError {
        return map;
    }
}

 

이로서 mysql에 있는 원하는 칼럼 값을 json을 통해

 

값을 전달받는 과정을 알아보았다.

 

유용하게 쓰이면 좋을 것 같다.

 

 

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading