2012-01-04 9 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; 
} 
?>  

はstackoverflowの例とmanファイルを通じて、トラブルシューティングの時間後、私はフォールドandroid.os.NetworkOnMainThreadException

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

。 何か目立つものはありますか?おかげさまで

+0

投稿された変数は「平均?私たちはここで何を見ているのですか? PHPスクリプトはどこですか? – deceze

+0

私はPHPのコンテンツを投稿します。 – wurde

+1

@Peceiverコメントではなくオリジナルの投稿を編集してPHPを投稿してください。 –

答えて

1

Android 3.0では、メイン(別名GUI)スレッドでネットワーク操作(サイトへの接続など)がある場合、アプリケーションはNetworkOnMainThreadExceptionをスローします。 2.2が動作するエミュレータでテストして、動作するかどうかを確認してください(コードには他にバグはありません)。それ以外の場合は3.xと4.xで動作させるには、Androidのthreadingをご覧ください。チュートリアルが見つかりましたhere

+0

このフォーラムrocks! – wurde

0

おそらく、StrictModeはUIスレッドで有効です。

試してみてください。

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); 
     }  
    }