2017-01-03 5 views
0

私はAndroid Javaにはかなり新しいです。私のコードは完璧に動作していますが、私が知ることができないのはPOSTデータをPHPファイルに送る方法です。正しい選択クエリを準備することができます。すべての助けがありがとう!Android Java POSTデータ

@Override 
protected Integer doInBackground(String... params) { 
    Integer result = 0; 

    HttpURLConnection urlConnection; 
    try { 
     URL url = new URL(params[0]); 
     urlConnection = (HttpURLConnection) url.openConnection(); 
     int statusCode = urlConnection.getResponseCode(); 

     // 200 represents HTTP OK 
     if (statusCode == 200) { 
      BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
      StringBuilder response = new StringBuilder(); 
      String line; 
      while ((line = r.readLine()) != null) { 
       response.append(line); 
      } 
      parseResult(response.toString()); 
      result = 1; // Successful 
     } else { 
      result = 0; //"Failed to fetch data!"; 
     } 
    } catch (Exception e) { 
     Log.d(TAG, e.getLocalizedMessage()); 
    } 
    return result; 
} 
+1

そのための 'urlConnection'の出力ストリームが必要です – 0xDEADC0DE

+0

https://developer.android.com/training/basics/network-ops/connecting.html – yogur

答えて

1

レトロフィットは、バックエンド(PHPのサーバまたは実データが格納されている他の言語)に接続するためのシンプルかつ強力なメカニズムを提供します。

まず、ビジネスインタフェースを定義します。

public interface MyBiz { 
    @FormUrlEncoded 
    @POST("/rest/api/path") 
    void doMyBiz(@Body Map<String, String> map); 
} 

新しいインスタンスを作成します。

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("https://dpq.co.ir") 
    .addConverterFactory(GsonConverterFactory.create()) 
    .build(); 
MyBiz service = retrofit.create(MyBiz.class); 

、最終的には、データをポスト:よりインフォア

https://square.github.io/retrofit/

-1

については

Map<String, Object> data; 
... 
doMyBiz(data); 

をここでの1からコードがあります私のpルーツ。いくつかの方法はデリケートされていますが、まだ機能しています。

@Override 
protected String doInBackground(String... urls) { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(StaticMeth.webPageUrl + "saveToServer.php"); 
    String message; 

    try{ 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("id", Long.toString(mId))); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     HttpResponse response = httpClient.execute(httpPost); 

     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); 
     String answer = StaticMeth.convertStreamToString(is); 
     if(answer.equals("Successfully \n")){ 
      changeToSyncronized(); 
      message = mContext.getResources().getString(R.string.successfully_saved); 
     }else{ 
      message = mContext.getResources().getString(R.string.saved_local_server_problems); 
     } 
    }catch(IOException e){ 
     message = mContext.getResources().getString(R.string.saved_local_conn_problems); 
    } 
    return message; 
} 
0

私はあなたが非常に簡単に行うために探しているものになりますが、あなたは後でそれが

などのキャッシュやクッキーの管理として提供しています機能を探索することができますだけでなく、OkHttpのようなライブラリを使用することをお勧めします

それはあなたのbuild.gradleに追加するのは非常に簡単です(モジュール:アプリ)

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

そして、それはほんの数より多くの行を取り、あなたのPHPページへのPOST呼び出しを行うために。追加の投稿パラメータを追加するには、「.add( 'key'、 'value')」を使用します。

RequestBody formBody = null; 
formBody = new FormBody.Builder() 
     .add("emailAddress", emailAddress) 
     .add("token", token) 
     .build(); 
Request request = new Request.Builder() 
     .url("http://www.yourwebsite.com/your/api/endpoint") 
     .post(formBody) 
     .build(); 

これで完了です。あなたが既にそうであるように非同期タスクの中に入れてください。

0

ネットワークコールを行うためにHttpUrlConnectionを使用しているので、接続 'POST'のためのメソッドを設定する必要があります。

httpURLConnection.setRequestMethod("POST"); 

はあなたがパラメータを設定しようとしている方法を決定する必要があり、どちらかあなたはJSON形式でそれを送信しようとしているか、URLエンコード形式でそれを送りたい

JSON形式でパラメータを送信するには: URLエンコード形式でそれを送信するために

httpURLConnection.setRequestProperty("Content-Type", "application/json"); 

または

httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 

は(「paramsは」あなたのパラメータは、送信するためにある)他のプロパティとストリーミングモード

httpURLConnection.setRequestProperty("charset", "utf-8"); 
httpURLConnection.setFixedLengthStreamingMode(params.getBytes().length); 

を設定OutputStreamを取得し、

DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream()); 
dataOutputStream.writeBytes(params); 
dataOutputStream.flush(); 
dataOutputStream.close(); 
(送信したいパラメータの)バイトを書きます

その後、さらにレスポンスコードをチェックして、入力ストリームを取得し続けることができます。

これが欲しいと思っています:)