2016-12-19 5 views
0

私はアンドロイドレイアウトでフォームを構築しており、そのフォームから何らかのテキストを取り込み、変数にアタッチするアクティビティを持っています。私のアンドロイドアプリケーションからPHPのウェブサイトにPOST情報を送信するにはどうすればいいですか

また、到着時にテキストを含むPOST変数を処理できるPHPフォームもあります。

HttpClientが廃止されているのを目の当たりにしていて、(死んでいるstackOverflowの回答が目を覚ます)、POSTを送信する最新の方法は何ですか?

私は何も複雑ではありません - ただ "ここであなたは一人の変数を接続して送信します。"

更新:私は外部のクラスを使用する必要がない答えを期待していました。アンドロイドはこの能力を独自に持っていませんか?ここで

+0

確かに - 外部のライブラリを使わずに行う方法がありますが、必要なコードの量だけを見てください。 http://stackoverflow.com/questions/9767952/how-to-add-parameters-to-httpurlconnection-using-post –

答えて

0

は孤独な変数

dependencies { 
    compile 'com.squareup.okhttp3:okhttp:3.1.2' 
    } 

を接続し、送信するために小さな一例である、あなたはところでSOこれらの輸入

import okhttp3.FormBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 

AsyncTask

private class NotifyPassengerDriverArrival extends AsyncTask<Void, Void, String> { 

     private final String url = Constants.API_PATH + "notify_driver_location?token=" + Constants.TOKEN; 
     private final OkHttpClient client = new OkHttpClient(); 

     @Override 
     protected void onPreExecute() { 
     super.onPreExecute(); 
     } 

     @Override 
     protected String doInBackground(Void... voids) { 

      try { 
       FormBody formBody = new FormBody.Builder() 
         .add("passenger_id", passengerID) 
         .build(); 
       Request.Builder builder = new Request.Builder(); 
       builder.url(url); 
       builder.post(formBody); 
       Request request = builder.build(); 

       okhttp3.Response response = client.newCall(request).execute(); 
       if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); 

       if (response.code() != 200) { 
        return null; 
       } 

       return "success"; 
      } catch (Exception e) { 
       return null; 
      } 

     } 


     @Override 
     protected void onPostExecute(String data) { 
      if (data == null) { 
       return; 
      } 
      else { 
       Toast.makeText(ReadyToStartTaxiJourneyActivity.this, "You are almost come to pickup location.", Toast.LENGTH_LONG).show(); 

      } 
      super.onPostExecute(data); 
     } 
    } 

を得ることができる答えがあります死んでいません!もしそうなら、あなたは墓地を掘るだけなのかもしれません!

+0

それらのすべてが死んでいるわけではありません。 – Truth

+0

とにかくこの答えがあなたを助けてくれることを願っています:) –

+1

Btw、OkHttpは、 'client.newCall(request).enqueue'を使う場合、AsyncTaskは必要ありません。ここを参照してください。 https://github.com/square/okhttp/wiki/Recipes#asynchronous-get –

0

あなたは、Androidの非同期HTTPクライアントを使用することができます

http://loopj.com/android-async-http/ 

のGradle

compile 'com.loopj.android:android-async-http:1.4.9' 

静的なHTTPクライアント

public class RestClient { 

    public static final String TAG = RestClient.class.getSimpleName(); 

    private static final String BASE_URL = "http://your-site.com/api/v1/whatever"; 

    private static AsyncHttpClient client = new AsyncHttpClient(); 

    public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.get(getAbsoluteUrl(url), params, responseHandler); 
    } 

    public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { 
     client.post(getAbsoluteUrl(url), params, responseHandler); 
    } 

    private static String getAbsoluteUrl(String relativeUrl) { 
     return BASE_URL + relativeUrl; 
    } 
}  

クライアントコード

... 
RequestParams params = new RequestParams(); 
params.put("THE_KEY", "THE_VALUE"); 
... 

AsyncHttpClient client = new AsyncHttpClient(); 
client.post("YOUR_URL", new AsyncHttpResponseHandler() { 

@Override 
public void onStart() { 
    // called before request is started 
} 

@Override 
public void onSuccess(int statusCode, Header[] headers, byte[] response) { 
    // called when response HTTP status is "200 OK" 
} 

@Override 
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { 
    // called when response HTTP status is "4XX" (eg. 401, 403, 404) 
} 

@Override 
public void onRetry(int retryNo) { 
    // called when request is retried 
} 
... 
関連する問題