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

mysql -> php -> 안드로이드 데이터 받기

0 추천
안녕하세요 ^^ mysql에 저장된 데이터를 꺼내오려고 php를 이용해 안드로이드에 전송하려 하는데

구글에 치면 글이 많이 나오는데 대부분 AsyncTask 를 쓰더라고요 한 3개 정도 들려서 다써봣는데  다 안되더라구요 ㅠ 인터넷 퍼미션은 했고  php도 정상 작동합니다

<?php  

  
$con=mysqli_connect("127.0.0.1","root","apmsetup","getdata");  
  
if (mysqli_connect_errno($con))  
{  
   echo "Failed to connect to MySQL: " . mysqli_connect_error();  
}  
  
 
  mysqli_set_charset($con,"utf8");
   
$res = mysqli_query($con,"select * from data");  
   
$result = array();  
   
while($row = mysqli_fetch_array($res)){  
  array_push($result,  
    array('image'=>$row[0],'url'=>$row[1]  
    ));  
}  
   
echo json_encode(array("result"=>$result));  
   
mysqli_close($con);  
   
?>  

 

 

하고 안드로이드 코드입니다

public class MainActivity extends AppCompatActivity {
    // 데이터를 받아올 PHP 주소
    String url = "http://127.0.0.1/getdata.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.textView);

        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("result");
                String zz = "";

 

                for ( int i = 0; i < results.length(); ++i ) {
                    JSONObject temp = results.getJSONObject(i);
                    zz +=temp.get("url");

                }
                tv.setText(zz);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
}

 

실행시킬때 밑에 로그캣보면 항상   class GettingPHP extends AsyncTask 이부분이 잘못됬다 그러던데;

버전도 혹시몰라 3.0으로 해봣는데 안되네요 ㅠ
껄껄앱 (1,910 포인트) 님이 2016년 2월 19일 질문

1개의 답변

0 추천
 
채택된 답변
url이 잘못되었습니다.

// 데이터를 받아올 PHP 주소
String url = "http://127.0.0.1/getdata.php";

url을 저렇게 하셨는데 저렇게 하면 안됩니다.

127.0.0.1은 자기 자신의 device 입니다.

즉, 웹서버를 구축한 컴퓨터에서는 127.0.0.1 로 접속하면 당연히 자신의 컴퓨터에 구축되었기에

정상동작합니다.

하지만 다른 컴퓨터로 127.0.0.1을 접속하면 웹서버를 구축한 컴퓨터에 접속하는게 아니라 자신의 컴퓨터에 접속합니다.

당연히 안되지요.

저렇게 빌드해서 폰에서 돌리면 자기 자신의 폰에 접속하게 됩니다.

같은 네트워크 상에 있다면 공유기에서 할당받은 ip로 해보세요.
원조안드로이드 (58,190 포인트) 님이 2016년 2월 19일 답변
껄껄앱님이 2016년 2월 19일 채택됨
아..! 감사합니다 ^^ 하나만 더여쭤보겠습니다. 혹시 2.3버전에서 저코드에다가 내부 IP주소 쓰면 안되는게 정상인가요?  제가 3.0버전으로 프로젝트 바꾸고 난뒤에 내부아이피 주소로 시도를 안해봐서 몰랐는데 3.0에서는 정상작동하네요. 분명 아까 2.3버전일때는 내부아이피로 해도 작동안하던데..
...