2

Androidアプリを使用してURLにデータを投稿しようとしています。

URL

パラメータ:「名前」と「メッセージ」

次のコードを使用していますが、機能しません。

public void onClick(View v) {
    // Create a new HttpClient and Post Header

            // Create a new HttpClient and Post Header
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://comparch2011.appspot.com/");

            try {
                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("name", "DEV"));
                nameValuePairs.add(new BasicNameValuePair("message", "AndDev is Cool!"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);

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

3 に答える 3

2

-まず最初に: adb logcatを使用する必要があります。それはあなたのコンピュータ上のあなたの携帯電話のリアルタイムのログを提供します.何が起こっているのかを知ることは非常に便利です.

-アクティビティでこれらの呼び出しを行っていると思われます。この場合、そのためにアプリがクラッシュしているだけです。それを防ぐためのセーフガードです。必要に応じて「メインスレッドのネットワーク」エラーが発生します(ここのように)。問題は、UI にも使用されるメイン スレッドでアクティビティが実行されることです。そのため、このようなネットワーク呼び出しを行うと、関数が戻るまですべての UI がブロックされます (また、Web サイトの応答を待っているため、数秒かかる場合があり、アプリの使いやすさが非常に悪くなります)。

解決策はAsyncTaskを使用することです。これは、非同期呼び出し (つまり、UI をブロックしない呼び出し) を行うことができる使いやすいクラスです。

于 2012-09-12T11:25:33.947 に答える
0

LogCat でわかるように、エラーは NetworkOnMainThreadException です。

どの Android がここにhttp://developer.android.com/reference/android/os/NetworkOnMainThreadException.htmlとして記載されているか:

NetworkOnMainThreadException:

アプリケーションがメイン スレッドでネットワーク操作を実行しようとしたときにスローされる例外。これは、Honeycom SDK 以降を対象とするアプリケーションに対してのみスローされます。以前のバージョンの SDK を対象とするアプリケーションは、メイン イベント ループ スレッドでネットワークを実行できますが、
推奨されません。

そのため、代わりにhttp://developer.android.com/reference/android/os/AsyncTask.htmlを参照してください。UI スレッドで getResponse を呼び出さないでください。

または、次のようにターゲットを変更するか、strictpolicy を変更することもできますが、そうすることはお勧めしません...

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
于 2012-09-12T11:30:34.257 に答える
0

メイン スレッドでネットワーク アクティビティを実行しないでください。ネットワーク アクションが実行されているときに、ユーザーがビューに応答することを許可しないためです。

Asynctask を使用すると、機能します。

http://developer.android.com/reference/android/os/AsyncTask.html

ニシン

于 2012-09-12T11:55:35.967 に答える