마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 <-> php <-> mysql간 통신 질문입니다.

0 추천

개발 입문한지 한달 정도 된 초보 개발자입니다.

구글링을 통해 안드로이드와 mysql 간 연결하는 법은 알아냈는데

막히는 부분이 있어 질문드립니다.

 

public void Debug(String phonenum, String deviceid) {
        class PHP_Debug extends AsyncTask<String, Void, Void> {
            @Override
            protected Void doInBackground(String... params) {
                try {
                    String phonenum = params[0];
                    String device = params[1];
                    URL url = new URL(""); //server URL
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setDoOutput(true);
                    conn.setDoInput(true);
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");

                    StringBuffer buffer = new StringBuffer();
                    buffer.append("phonenum").append("=").append(phonenum).append("&");
                    buffer.append("deviceid").append("=").append(device);

                    OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
                    PrintWriter wr = new PrintWriter(osw);
                    wr.write(buffer.toString());
                    wr.flush();
                } catch(Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }
        PHP_Debug c = new PHP_Debug();
        c.execute(phonenum, deviceid);
    }
<?php
$con = mysqli_connect('localhost','root','password');
if(!$con) {
die('Could not connect: '.mysql_error());
}

mysqli_select_db($con, 'dbname');
mysqli_query($con, "set session character_set_connection=utf8;");
mysqli_query($con, "set session character_set_results=utf8;");
mysqli_query($con, "set session character_set_client=utf8;");

$phonenum = $_POST['phonenum']; //폰번호
$deviceid = $_POST['deviceid']; //디바이스id
$query = "insert into debug (PhoneNum, DeviceID) values ('".$phonenum."','".$deviceid."')";
mysqli_query($con, $query);
mysqli_close($con);
?>

 

debug 테이블에 전화번호와 디바이스ID를 넣는 코드구요...

어떻게 어떻게 여기까지 구글링을 해서 했는데

액티비티에서 Debug(전화번호, 디바이스ID);를 불러오면 아무 진행이 되지 않습니다.

왜그런걸까요ㅠㅠ

로그캣은 다음과 같습니다.

02-12 11:55:58.811 26738-19556/com.twowords.get2words I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
02-12 11:55:58.811 26738-19556/com.twowords.get2words I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false

 

나래별 (150 포인트) 님이 2016년 2월 12일 질문

1개의 답변

0 추천
 
채택된 답변
        class PHP_Debug extends AsyncTask<String, Void, Void> {
			String phonenum;
			String deviceid;
			public PHP_Debug(String phonenum,String deviceid){
				phonenum = this.phonenum;
				deviceid = this.deviceid;
			}
            @Override
            protected Void doInBackground(String... params) {
                try {
                    String phonenum = params[0];
                    String device = params[1];
                    URL url = new URL(""); //server URL
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setDoOutput(true);
                    conn.setDoInput(true);
                    conn.setRequestMethod("POST");
                    conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
 
                    StringBuffer buffer = new StringBuffer();
                    buffer.append("phonenum").append("=").append(phonenum).append("&");
                    buffer.append("deviceid").append("=").append(device);
 
                    OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
                    PrintWriter wr = new PrintWriter(osw);
                    wr.write(buffer.toString());
                    wr.flush();
                } catch(Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }

		  new PHP_Debug(phonenum,deviceid).execute();
    
    

이렇게한번해보세영

sadeva (21,550 포인트) 님이 2016년 2월 12일 답변
나래별님이 2016년 2월 12일 채택됨
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime: FATAL EXCEPTION: main
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime: Process: com.twowords.get2words, PID: 20631
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime: android.os.NetworkOnMainThreadException
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at libcore.io.IoBridge.connect(IoBridge.java:122)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at java.net.Socket.connect(Socket.java:882)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:174)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.Connection.connect(Connection.java:1198)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:395)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:298)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:399)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:110)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:221)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.twowords.get2words.MainActivity.PHP_Debug(MainActivity.java:208)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.twowords.get2words.MainActivity$1.onClick(MainActivity.java:63)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.view.View.performClick(View.java:5254)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21179)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:145)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:6837)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:372)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
02-12 16:05:18.091 20631-20631/com.twowords.get2words E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

OutputStreamWriter 쪽에서 자꾸 에러가 납니다ㅠㅠ
(MainActivity.java:208) 이건 OutputStreamWriter 쪽 코드고
(MainActivity.java:63) 이건 메소드 집어넣은 줄입니다.
public void PHP_Debug(String phonenum, String deviceid) {
        try {
            URL url = new URL("serverurl");
            HttpURLConnection http = (HttpURLConnection) url.openConnection();
            http.setDefaultUseCaches(false);
            http.setDoInput(true);
            http.setDoOutput(true);
            http.setRequestMethod("POST");
            http.setRequestProperty("content-type", "application/x-www-form-urlencoded");

            StringBuffer buffer = new StringBuffer();
            buffer.append("phonenum").append("=").append(phonenum).append("&");
            buffer.append("deviceid").append("=").append(deviceid);

            OutputStreamWriter osw = new OutputStreamWriter(http.getOutputStream());
            PrintWriter writer = new PrintWriter(osw);
            writer.write(buffer.toString());
            writer.flush();

            InputStreamReader tmp = new InputStreamReader(http.getInputStream());
            BufferedReader reader = new BufferedReader(tmp);
            StringBuilder builder = new StringBuilder();
            String str;
            while ((str = reader.readLine()) != null) {
                builder.append(str + "\n");
            }
            String HttpPostData_Result = builder.toString();
            System.out.println("값 뭐가 찍히나? : " + HttpPostData_Result);
        } catch (MalformedURLException e) {

        } catch (IOException e) {

        }
    }



PHP_Debug(phoneNum, deviceID);
oncreate문에다가

        if (android.os.Build.VERSION.SDK_INT > 9) { //oncreate 에서 바로 쓰레드돌릴려고 임시방편으로 넣어둔소스

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

            StrictMode.setThreadPolicy(policy);

        }
       

이거추가해주세요 생각해보니 async task 가 필요하긴하네요 ㅠ 메인스레드 쓸수있게하는 임시방편소스라 해당 소스 oncreate문에다가 넣으면 아마 실행되실겁니다.
오오 드디어 됐습니다!!
오랫동안 정말 감사합니다ㅠㅠ 복받으실거에요ㅠㅠㅠ
ㅎㅎ 되셨다니 다행이네여~~~ 주말잘보내세영
...