2

フォームのように機能するアプリケーションを作成しました。4 つのフィールドを取り、無効な文字が入力されていないことを確認するために情報を検証します。これらの 4 つのフィールドは、変数に格納されます。

  • 電話
  • 名前
  • Eメール
  • コメント

    今、フォームデータ(これらの4つのフィールドに入力され、変数に保存されているものは何でも)をURL( http://www.test.comを使用します)に送信したいのですが、これを行う方法がわかりません. HttpURLConnection と呼ばれるものを探していると思いますが、送信する変数を指定する方法がわかりません。ウェブサイトhttp://developer.android.com/reference/java/net/HttpURLConnection.htmlから見つけた以下のコード

    private class UploadFilesTask extends AsyncTask<URL, Integer, Long>{
    protected Long doInBackground(URL... urls) {
    
        try {
            HttpClient http = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://www.test.com");
    
            List<NameValuePair> data = new ArrayList<NameValuePair>();
            data.add(new BasicNameValuePair("phone", "value"));
            data.add(new BasicNameValuePair("name", "value"));
            data.add(new BasicNameValuePair("email", "value"));
            data.add(new BasicNameValuePair("comments", "value"));
            post.setEntity(new UrlEncodedFormEntity(data));
    
            HttpResponse response = http.execute(post);
            // do something with the response
        }
        catch (ClientProtocolException e) {
            // do something
            finish();
        }
        catch (IOException e) {
            // do something
            finish();
        }
    

    }

    }

どんな助けでも大歓迎です、ありがとう!

4

4 に答える 4

5

フォーム データをサーバーに送信する最も簡単な方法は、HttpClient と HttpPost を使用することです。

次のようなことを試してください:

try {
    HttpClient http = new DefaultHttpClient();
    HttpPost   post = new HttpPost("http://www.example.com/process");

    List<NameValuePair> data = new ArrayList<NameValuePair>();
    data.add(new BasicNameValuePair("phone", "value");
    data.add(new BasicNameValuePair("name", "value");
    data.add(new BasicNameValuePair("email", "value");
    data.add(new BasicNameValuePair("comments", "value");
    post.setEntity(new UrlEncodedFormEntity(data));

    HttpResponse response = http.execute(post);
    // do something with the response
}
catch (ClientProtocolException e) {
    // do something
}
catch (IOException e) {
    // do something
}

この操作は AsyncTask で実行して、ネットワーク操作の完了を待って UI スレッドをロックしないようにすることに注意してください。

編集

以下は、AsyncTask でどのように見えるかを示す簡単な例です。

public class SendTask extends AsyncTask<Void, Void, Boolean> {

    String responseString;

    @Override
    protected Boolean doInBackground(Void... params) {
        try {

            HttpClient http = new DefaultHttpClient();
            HttpPost post = new HttpPost("http://www.test.com");

            List<NameValuePair> data = new ArrayList<NameValuePair>();
            data.add(new BasicNameValuePair("phone", "value"));
            data.add(new BasicNameValuePair("name", "value"));
            data.add(new BasicNameValuePair("email", "value"));
            data.add(new BasicNameValuePair("comments", "value"));
            post.setEntity(new UrlEncodedFormEntity(data));

            HttpResponse response = http.execute(post);
            responseString = new BasicResponseHandler().
                                 handleResponse(response); // Basic handler
            return true;
        }
        catch (ClientProtocolException e) {
            // do something useful to recover from the exception
            // Note: there may not be anything useful to do here
        }
        catch (IOException e) {
            // do something useful to recover from the exception
            // Note: there may not be anything useful to do here
        }           
        return false;
    }
    @Override
    protected void onPostExecute(Boolean success) {
        // TODO: Do something more useful here
        if (success) {
            Toast.makeText(MainActivity.this, "Success: " + responseString, Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(MainActivity.this, "Failed", Toast.LENGTH_LONG).show();
        }
    }
}
于 2012-07-23T14:27:52.330 に答える
1

フィールドをパラメーターとして URL に追加します。

String phone="phone=234432";
String name="name=John Smith";
String email="email=test@email.com"; 

Url = new URL("http://www.test.com?"+phone+"&"+name+"&"+email);

テストされていませんが、GET Http リクエストで動作するはずです。

于 2012-07-23T14:26:57.813 に答える
0

//xml リクエストを使用

String url="http://www.test.com";
String xmlRequest="<message xmlns=\"http://test.com/schemas/ma\"><header></header>"+
"<body><phone>9944556622</phone><name>Mytest name</name><email>mytest@email.com</email>"+"<comments>hay this seems nice</comments></body></message>"

HttpPost httppost = new HttpPost(url);
    StringEntity se = new StringEntity(xmlRequest,HTTP.UTF_8);


httppost.setHeader("Content-Type","application/xml");
httppost.setHeader("Accept","application/xml");

httppost.setEntity(se);

BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);

   StatusLine statusLine = httpResponse.getStatusLine();
于 2012-07-23T15:41:03.507 に答える