xml形式でサーバーにデータを送信する方法をご教授願いたいです。
送りたい形式は
<test>
<name>name</name>
現状、サーバーからレスポンスが返ってきますが、うまく内容が送れていないようです。
サーバーからのレスポンスは、今回送った内容と登録が正常に終わったかどうかのコードが返ってきますが、現状内容が空で、通信系エラーコードが返ってきます。
【期待値】
<test>
<name>teratail</name>
【現状】
<test>
<name></name>
※コードを解決済みコードに編集しました
java
1 2// 挿入用データをString型で作成 3 String dataString = 4 "<test>" + 5 "<name>" + name + "</name>" + 6 "<adress>" + adress + "</adress>" + 7 "</test>"; 8 9 try { 10 new HttpPostTask().execute("https://test.com/xxxxx/xxxx/xxx.asp", dataString); 11 } catch (Exception e) { 12 e.printStackTrace(); 13 } 14 15 16public final class HttpPostTask extends AsyncTask<String, Void, Void> { 17 @Override 18 protected Void doInBackground(String... strings) { 19 20 URL url = null; 21 int length = 0; 22 try{ 23 url = new URL(strings[0]); 24 }catch(MalformedURLException e){ 25 e.printStackTrace(); 26 } 27 28 // コンテンツの長さを取得 29 try { 30 // StringBuilderを文字列に変化してからバイト長を取得 31 length = strings[1].getBytes(CHARSET).length; 32 } catch (UnsupportedEncodingException e1) { 33 e1.printStackTrace(); 34 } 35 36 Log.d("XML",strings[1]); 37 38 HttpsURLConnection con = null; 39 try { 40 con = (HttpsURLConnection) url.openConnection(); 41 con.setRequestMethod("POST"); 42 con.setDoOutput(true); 43 con.setDoInput(true); 44 con.setFixedLengthStreamingMode(245); 45 // 持続接続を設定 46 con.setRequestProperty("Connection", "Keep-Alive"); 47 // POSTデータの形式を設定 48 con.setRequestProperty("Content-Type", String.format("text/plain; boundary=%s", BOURDARY)); 49 // POSTデータの長さを設定 50 con.setRequestProperty("Content-Length", String.valueOf(length)); 51 con.connect(); 52 53 // POSTデータ送信処理 54 OutputStream out = null; 55 try { 56 out = con.getOutputStream(); 57 out.write(strings[1].getBytes("UTF-8")); 58 out.flush(); 59 } catch (IOException e) { 60 // POST送信エラー 61 e.printStackTrace(); 62 } finally { 63 if (out != null) { 64 out.close(); 65 } 66 } 67 68 69 final int status = con.getResponseCode(); 70 if (status == HttpURLConnection.HTTP_OK) { 71 // 正常 72 // レスポンス取得処理を実行 73 InputStream inputStream =con.getInputStream(); 74 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 75 76 StringBuffer buffer = new StringBuffer(); 77 String temp = null; 78 79 while((temp = bufferedReader.readLine()) != null) { 80 buffer.append(temp); 81 } 82 83 Log.d("BUFF",buffer.toString()); 84 85 } 86 87 } catch (IOException e) { 88 e.printStackTrace(); 89 } finally { 90 if (con != null) { 91 con.disconnect(); 92 } 93 } 94 return null; 95 } 96 97 }
よろしくお願いします。
【サーバー側仕様】
「アプリ⇨サーバー」
|データID|データ名称|分類|Xpath式|データ型|
|:--|:--:|--:|
|P01_01|test|ELM|/test/||
|P01_02|name|TXT|/test/name|CHAR|
|P01_03|address|TXT|/test/address|VACHAR|
「サーバー⇨アプリ」
上記の要求に対する応答
|データID|データ名称|分類|Xpath式|データ型|応答内容|
|:--|:--:|--:|
|P03_01|test|ELM|/test/|||
|P03_02|name|TXT|/test/name|CHAR|送信内容|
|P03_03|address|TXT|/test/address|VACHAR|送信内容|
|P03_04|code|TXT|/test/address|CHAR|1:完了2:通信エラー系など3:重複登録4:その他エラー|
【サーバーへのリクエスト】
dataStringをログで出したもの
コード
<test><address>test@test.co.jp</address><name>testname</name></test>
【サーバーからのレスポンス】
bufferをwhileが終わった後に.toStringしてログで出したもの
<?xml version="1.0" encoding="Shift_JIS"?><test> <name></name><address></address> <code>2</code></test>コード
回答3件
あなたの回答
tips
プレビュー