2012-01-04 4 views
0

.PHP 파일은 db 연결을 만들고 sql을 삽입하여 성공적으로 작동합니다. 내 유일한 결론은 어딘가에 .java 활동 .. 그리고 네, 내가 매니 페스트 내에서 인터넷 허가를 설정했습니다. HttpPost 변수 및 PHP 오류

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      //setContentView(R.layout.email); 
      try { 
       postInternetData(); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

private void postInternetData() { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("http://www.example.com/app/insert_tag.php"); 

    try{    
     List<NameValuePair> formparams = new ArrayList<NameValuePair>(); 
     formparams.add(new BasicNameValuePair("name", "android")); 

     post.setEntity(new UrlEncodedFormEntity (formparams)); 

     HttpResponse response = httpclient.execute(post); 

     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
     } 

    } 

<?php 
// CREATE the connection 
$connection = mysql_connect('XXXXXXXXXXX.db.godaddy.com','XXXXXXXXXXX','XXXXXXXXXXX'); 
if(!$connection) { 
    echo 'failure to connect host'; 
} 

$mysql_select_db = mysql_select_db('XXXXXXXXXXX', $connection); 

if(!$mysql_select_db) { 
    echo 'failure to select db'; 
} 

$name = $_POST['name']; 

$qry = "INSERT INTO httptest(id, name) VALUES ('', '" . $name . "');"; 

$result = mysql_query($qry, $connection); 
IF (!$result){ 
    echo 'failure to query db'; 
} else { 
    echo $result; 
} 
?>  

에 유래 예 및 사람 파일을 통해 문제의 시간 후, I ​​폴드 android.os.NetworkOnMainThreadException

: 01-03 21 : 56 : 05.784 : System.err에 (1398)/W MY ERROR

. 눈에 띄는 것이 있습니까? 감사합니다. .

+0

게시 된 변수는 "mean? 우리가 여기서 뭘보고있는거야? PHP 스크립트는 어디에 있습니까? – deceze

+0

나는 PHP 콘텐츠를 게시 할 예정입니다. – wurde

+1

@Peceiver 의견이 아닌 원본 게시물을 편집하여 PHP를 게시하십시오. –

답변

1

기본 (일명 GUI) 스레드에서 네트워크 작업 (예 : 사이트 연결)이있는 경우 Android 3.0부터 응용 프로그램은 NetworkOnMainThreadException을 던집니다. 2.2 버전을 실행하는 에뮬레이터에서 테스트 해보십시오 (코드에 다른 버그가없는 경우). 그렇지 않으면 3.x 및 4.x에서 작동하도록하려면 Android에서 threading을 살펴 봐야합니다. 자습서를 찾을 수 있습니다 here

+0

이 포럼은 바위가! – wurde

0

UI 스레드에서 StrictMode가 사용 설정되었습니다.

시도 :

ThreadPolicy tp = ThreadPolicy.LAX; 
StrictMode.setThreadPolicy(tp); 

하지만 위의 권장하지 않습니다 연습, 나는 당신이 AsyncTask을 사용할 필요가 있다고 생각합니다.

2

다른 사람들이 언급 한 것처럼 Android는 더 이상 UI 스레드에서 네트워크 활동을 허용하지 않습니다. 네트워크 활동 기간 동안 UI가 응답하지 않아 사용자 경험이 좋지 않기 때문에 그렇게하지 않아야합니다. 사용할 필요가있는 무엇

이것은 당신이 ASyncTask

new MyAsyncTask().execute(); 

부를 것이다 어떻게 ASyncTask

입니다 그리고 이것은 당신이 그것을 설정하는 방법입니다

상호 작용 "할 수없는 무엇을
private final class MyAsyncTask extends AsyncTask<Void,Void,Void> 
    { 
     private ProgressDialog progressdialog; 
     protected String doInBackground(Void... params) 
     { 
      try 
      { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpResponse response = httpclient.execute(new HttpGet("http://example.com/getinfo")); 
       StatusLine statusLine = response.getStatusLine(); 

       if(statusLine.getStatusCode() == HttpStatus.SC_OK) 
       {    
        //successful response     
       } 
       else 
       { 
        response.getEntity().getContent().close(); 
        throw new IOException(statusLine.getReasonPhrase()); 
       } 
      } 
      catch(Exception e) 
      { 
       ProgressDialog.show(HelloWorldActivity.this,"","Failed",true);    
      }   
     } 

     protected void onPostExecute(String result) 
     { 
      if (progressdialog.isShowing()) 
       progressdialog.dismiss(); 

      Toast.makeText(HelloWorldActivity.this,"Completed",Toast.LENGTH_SHORT).show();  
     }  

     protected void onPreExecute() 
     { 
      progressdialog = ProgressDialog.show(HelloWorldActivity.this,"","Working...",true); 
     }  
    }