2012-01-01 5 views
2

mysql 데이터베이스를 안드로이드 에뮬레이터와 로컬로 연결하고 싶습니다. 나는 응용 프로그램 엔진 구글 클라우드 SQL에서 데이터를 액세스하기위한 HTTP GET 및 POST 방법을 사용하지만 난 내가 연결을 위해 토스트를 보여 그 코드를 다음 사용하면 로컬 phpMyAdmin을 ...안드로이드 에뮬레이터를 로컬 mysql 데이터베이스와 연결하는 방법

를 사용하여 연결하려는

 String result = ""; 
     //the year data to send 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("name","Hammad")); 

     //http post 
     try{ 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://localhost/myApp/read_data.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 

       Log.e("log_tag", "connection success "); 
       Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
     }catch(Exception e){ 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
       Toast.makeText(getApplicationContext(), "Connection fail", Toast.LENGTH_SHORT).show(); 

     } 
     //convert response to string 
     try{ 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
         Toast.makeText(getApplicationContext(), "Input Reading pass", Toast.LENGTH_SHORT).show(); 
       } 
       is.close(); 

       result=sb.toString(); 
     }catch(Exception e){ 
       Log.e("log_tag", "Error converting result "+e.toString()); 
      Toast.makeText(getApplicationContext(), " Input reading fail", Toast.LENGTH_SHORT).show(); 

     } 

     //parse json data 
     try{ 
       JSONArray jArray = new JSONArray(result); 
       for(int i=0;i<jArray.length();i++){ 
         JSONObject json_data = jArray.getJSONObject(i); 
         Log.i("log_tag","id: "+json_data.getInt("user_id")+ 
           ", Username: "+json_data.getString("username")+ 
           ", Name: "+json_data.getInt("name")+ 
           ", City: "+json_data.getInt("city") 
         ); 
         Toast.makeText(getApplicationContext(), "JsonArray pass", Toast.LENGTH_SHORT).show(); 
       } 

     }catch(JSONException e){ 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
       Toast.makeText(getApplicationContext(), "JsonArray fail", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    } 
+0

답변

4
실패

에뮬레이터 내에서 이것을 실행하는 경우 localhost:3306이 작동하지 않습니다. MySQL을 실행하는 컴퓨터의 IP 주소로 바꾸십시오. 예를 들어 로컬 디브 (MySQL을 돌리는) 머신이 IP 192.168.0.10을 사용한다면, 그 값을 192.168.0.10:3306으로 변경하십시오.

에뮬레이터 내 (또는 장치에서도) http://localhost:3306에 액세스하려고 시도하면 루프백 주소 (에뮬레이터/장치에서)에 포트 3306에 연결하려고 시도합니다. 당신은 분명히 SQL 서비스가 안드로이드에서 실행되도록하지 않으므로 이것이 의미가 없습니다.

또한 OS 구성에 따라 방화벽에서 포트 3306을 열어야 할 수 있습니다.

편집 : Warren의 팁 (아래)은 Android 문서의 details으로 연결됩니다. OS의 방화벽을 망치고 싶지 않은 경우 10.0.2.2를 고수하고 싶을 수도 있습니다.

+1

몇 가지 추가 정보 : 에뮬레이터를 실행하는 시스템에서'localhost'를 얻으려면'10.0.2.2' - 짧은 세부 정보를 사용해야합니다 : http://www.droidnova.com/ever 102.html – WarrenFaith

+0

감사합니다. 워렌 파이스가 현재 잘 작동하고 있습니다. :) –

+0

마빈과 워렌이 빠른 답장을 보내 주신 것을 환영합니다. 로컬 컴퓨터에서 루프백하는 방법을 사용합니다. 그것의 일 벌금 .. 또 다른 문제는 내가 직면 한 첫 번째 활동 내 첫 번째 쿼리를 제출할 때 잘 작동하는 동시에 두 번째 작업 있지만 두 번째 작업에 내 두 번째 쿼리를 작동하지 않습니다. 나는 두 번째 활동을 첫 번째 활동 대신 실행 프로그램 활동으로 바꾸어 검사하고 작업을 시작합니다. 내가 뭘 잘못하고있는 걸까요? –

관련 문제