2012-03-11 13 views
1

this exampleのような名前の値の組み合わせでMySQLデータベースをAndroidから照会できる例がたくさんありますが、うまく動作するようになっています。MySQL、Android、PHPの問題

しかし、私はそれをもっと簡単にしたいと思っています。それが問題にぶつかるときです。以下のクエリでテーブル全体を返すだけです。

<?php 
mysql_connect("localhost","username","pw"); 
mysql_select_db("db"); 

$q=mysql_query("SELECT field FROM table"); 

while($e=mysql_fetch_assoc($q)) 
     $output[]=$e; 

print(json_encode($output)); 

mysql_close(); 

?> 

主な違いは、$ _REQUEST行が使用されていないことです。 PHPコードは、Webブラウザで実行すると、それ自体で正常に動作します。

問題は、以下のAndroidコードで発生します。最終的なhttpclient.execute行を実行すると失敗します。

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://site.com/db.php"); 
//httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httppost); 

エラーは、android.os.NetworkOnMainThreadExceptionです。

PHPスクリプトが受け取る必要がある実際のnameValuePairsがないので、ここにsetEntityの部分が必要かどうか分かりません。私は上記のようにそれをコメントアウトしていくつかのダミーの値のペアを設定しようとしましたが、どちらにも接続しません。私はsetEntityの部分がどこに問題があるのだろうと思う。この場合、どのようにエンティティを設定しますか?それとも別の問題ですか?ありがとう。

更新: 以下のようにHttpPostをHttpGetに変更しようとしましたが、同じ問題が発生しました。

HttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpget = new HttpGet("http://site.com/db.php"); 
//httpget.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httpget); 
+1

あなたはどのような問題に取り組んでいますか? – dldnh

+0

"HttpResponse response = httpclient.execute(httppost);" Javaコード内の行が失敗します。質問を編集して明確にするようにします。 – mattboy

+0

HttpGetを使用する必要があるときにHttpPostを使用する理由 – Jens

答えて

1

この質問によると:あなたはそれはあなたのアプリケーションの応答性を痛いので、悪い習慣であるメインスレッド上でのネットワーク操作を実行すると例外がスローされHow to fix android.os.NetworkOnMainThreadException?

。作業を行うには、バックグラウンドスレッドを使用する必要があります。

+0

* facepalm *それが問題でした。私は実際にこれについて既に知っていて以前に一度解決していたので迷惑です。私に思い出させてくれてありがとう。途中で新しいスレッドを開始する代わりの(しかしちっぽけな)解決策は、以下のコードでポリシーを変更することです。 'StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()。permitAll()。ビルド(); StrictMode.setThreadPolicy(ポリシー); ' – mattboy