2016-07-25 32 views
1

私はHttpURLConnection経由で投稿データを送信しようとしていますが、投稿データを送信していないようです。Android HttpURLConnection書き込み投稿データ

私はPOSTリクエストを送信しようとする直前にデータを出力できますが、サーバー側でチェックするとPHPファイルへの接続が行われますが、POSTデータは空です。

したがって、私はデータがjsonObjectに存在することを知っています。 私はそれがtry catchステートメントになることも知っていますが、接続すると正しく送受信されません。

try { 
     URL url = new URL(emailURL); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

     conn.setDoOutput(true); 

     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Content-Type", "application/json"); 
     conn.setRequestProperty("charset", "utf-8"); 
     conn.setRequestProperty("Content-Length", Integer.toString(jsonObject.toString().length())); 
     conn.setUseCaches(false); 

     OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

     wr.write(jsonObject.toString()); 

      wr.close(); 

     BufferedReader reader = null; 
     reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while ((line = reader.readLine()) != null) { 
      // Append server response in string 
      sb.append(line + "\n"); 
     } 

     String text = ""; 
     text = sb.toString(); 



    } catch (Exception e) { 

     throw new RuntimeException(e); 
    } 
+1

ちょっと質問がありますが、あなたの仕事をはるかに簡単にし、それらを使用しないかしないライブラリがありますか? –

+0

本当にありますか?私はAndroid開発の初心者ですので、これは私にとって初めてのことです。 – Rich

+0

これを試してください:http://loopj.com/android-async-http/ instagramはそれを使用し、多くの有名なアプリはたくさんの苦痛を節約します。 –

答えて

0

実際にサーバーに接続する方法を追加してください。サーバーに接続中に何か問題があるの場合は、例外が表示されますので、

int responseCodeFromServer = -1; 
    try { 
     responseCodeFromServer=conn.getResponseCode(); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 

    if (responseCodeFromServer == HttpsURLConnection.HTTP_OK){ 
     BufferedReader reader = null; 
     reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 

     // Read Server Response 
     while ((line = reader.readLine()) != null) { 
      // Append server response in string 
      sb.append(line + "\n"); 
     } 

     String text = ""; 
     text = sb.toString(); 
    } 

は次のようにコードを変更します。

+0

「メソッドの追加」とまったく同じ意味ですか? – EJP

+0

私は、サーバからのレスポンスコードを検出するための条件を追加することを意味します(variableCodeFromServer変数を参照)。 – Afin

0

応答コードまたは入力ストリームまたはエラーストリームを取得するまでは何も起こりません。あなたはこれらのことの一つをしなければなりません。

NBコンテンツの長さを設定する必要はありません。 Javaはこれを行います。同様に、setDoOutput(true)は要求メソッドをPOSTに設定します。

+0

私は 'setRequestMethod(" POST ");と思ったリクエストメソッドを設定しました:) –

+0

@ cricket_007もちろん、OPはすでに' setDoOutput() 'を呼び出しています。 Javadocを参照してください。 – EJP

-1
conn.setRequestProperty("charset", "utf-8"); 
conn.setRequestProperty("Content-Length", Integer.toString(jsonObject.toString().length())); 
conn.setUseCaches(false); 

conn.connect(); // this is missing in your code 

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
+0

'connect()'は自動です。 Javadocを参照してください。それは欠けていません。 – EJP

+0

JavaDocによると、「URLConnectionオブジェクトは2つの段階を経る:最初に作成された後、接続された後、作成され、接続される前に、さまざまなオプションを指定できます(doInputやUseCachesなど)。必要に応じて、getContentLengthのように接続中に依存する操作は、暗黙的に接続を実行します。 – tyagi

+0

@EJP "connect()は自動ではありません"。 https://docs.oracle.com/javase/7/docs/api/java/net/URLConnection.html#connect%28%29 – tyagi

関連する問題