2012-11-29 2 views
0

에 나는 하나 개의 고유 한 테이블 MySQL 데이터베이스가 ID, 위도 을,이 표는 최대 가득 4 개 져야 할 엔트리에 이미 북 길이의 4 개 개의 값 (1E6은이지도보기에 사용하기 때문이다).연결 안드로이드 앱 PHP를 통해 MySQL의 DB/JSON

내 목표는지도보기에 표시하는 것입니다이 동적으로 JSON 배열을 생성하고, httpPost 등으로 PHP 스크립트 ...

이 코드는 내가 지금까지 가지고 있습니다 사용하는 모든 이들 4 geopoints :

을 내가 브라우저에 URL을 입력대로 정확히 알려주와 정확한 JSON 배열을 생성하기 때문에

<?php 
mysql_connect("?????.com", "username", "password"); 
mysql_select_db("database_name"); 

$q = mysql_query("SELECT * FROM geopoints"); 
while ($e = mysql_fetch_assoc($q)) 
    $output[] = $e; 

print(json_encode($output)); 
mysql_close(); 
?> 

내가 바로 실행이 파일이 :

getjson = (Button) findViewById(R.id.button1); 

    getjson.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      JSONArray jArray; 
      String result = null; 
      InputStream is = null; 
      StringBuilder sb = null; 
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();//Whats this for? 

      try { 

       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(
         "http://????????.com/????/getGeopoints.php"); 
       HttpResponse response = httpclient.execute(httpPost); 
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 

      } catch (Exception e) { 
       Log.e("log_tag", "Error connecting to http " + e.toString()); 
      } 

      try { 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(is, "iso-8859-1"), 8); 
       sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line + "\n"); 
       } 
       is.close(); 

       result = sb.toString(); 
      } catch (Exception e) { 
       Log.e("log_tag", "Error converting " + e.toString()); 
      } 

      try { 

       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("id") 
          + ", latitude: " + json_data.getInt("lat") 
          + ", longitude: " + json_data.getInt("long")); 


       } 
      } catch (JSONException e) { 
       Log.e("log_tag", "Error parsing data " + e.toString()); 
      } 
     } 
    }); 
는 PHP 파일입니다 나는 원한다. 내가 이해하지 못한다고 생각하는 것은 HttpEntity가 무엇인가? 내가 튜토리얼을 따라 갔기 때문에 거기에 정보가있는 배열을 사용하여 정보를 필터링하고 싶지 않기 때문에 정보를 가진 배열을 사용한다. (나는 하나 또는 두개가 아닌 모든 데이터베이스 테이블 엔트리를 원한다.) 그냥 leaved했다. 그것은 비어 있습니다.

내 코드에 어떤 문제가 있습니까? logcat에있는 오류는 모든 catch 메시지 "11-29 12 : 47 : 29.662 : E/log_tag (898) : http Http android.os.NetworkOnMainThreadException에 연결하는 중 오류가 발생했습니다."입니다.

답변

1

기본 UI 스레드를 차단하고 있기 때문입니다. HTTP 요청을 AsyncTasks를 사용해보십시오. 메인 UI 스레드에서 네트워크 요청을 허가하지 않는> = 3.0

2

android.os.NetworkOnMainThreadException

로이드. 당신은 네트워크 요청을 호출하는 AsyncTask를 사용해야합니다.

관련 문제