質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

2回答

4584閲覧

cakephpでandroidからpost送信の受け取りができない

bluedog

総合スコア12

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/09/15 01:28

編集2018/09/27 12:43

解決したいことはandroidからpost送信しcakephpで受け取ることです。

androidのEditText で入力した内容がcakephpで受け取れていないようです。
cakephpのindexページへの遷移はできていますがpost送信できておらず、
cakephpのcontrollerの受け取り方に問題があるのでしょうか?

android-Logcat

09-23 00:42:37.513 7972-7993/? W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 09-23 00:42:37.632 7972-7993/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da 09-23 00:42:37.633 7972-7993/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da 09-23 00:42:38.566 7972-7972/com.example.jyun.myapplication W/View: dispatchProvideAutofillStructure(): not laid out, ignoring

上記のエラーに対応するため仮想デバイスのエミュレートパフォーマンス→グラフィックスをSoftwareに変更していますがうまくいきませんでした。

android-MainActivity

java

1public class MainActivity extends AppCompatActivity { 2 3 private UploadTask task; 4 private TextView textView; 5 private EditText editText; 6 7 String url = "http://cake/books/index"; 8 9 10 @Override 11 protected void onCreate(Bundle savedInstanceState) { 12 super.onCreate(savedInstanceState); 13 setContentView(R.layout.activity_main); 14 15 editText = findViewById(R.id.uriname); 16 17 Button post = findViewById(R.id.post); 18 19 post.setOnClickListener(new View.OnClickListener() { 20 @Override 21 public void onClick(View v) { 22 String param0 = editText.getText().toString(); 23 24 if(param0.length() != 0){ 25 task = new UploadTask(); 26 task.setListener(createListener()); 27 task.execute(param0); 28 } 29 30 } 31 }); 32 33 Button browser = findViewById(R.id.browser); 34 browser.setOnClickListener(new View.OnClickListener() { 35 @Override 36 public void onClick(View v) { 37 Uri uri = Uri.parse(url); 38 Intent intent = new Intent(Intent.ACTION_VIEW,uri); 39 startActivity(intent); 40 41 textView.setText(""); 42 } 43 }); 44 45 textView = findViewById(R.id.text_view); 46 } 47 48 49 @Override 50 protected void onDestroy() { 51 task.setListener(null); 52 super.onDestroy(); 53 } 54 55 private UploadTask.Listener createListener() { 56 return new UploadTask.Listener() { 57 @Override 58 public void onSuccess(String result) { 59 textView.setText(result); 60 } 61 }; 62 } 63}

android-UploadTask

java

1public class UploadTask extends AsyncTask<String, Void, String> { 2 3 private Listener listener; 4 5 @Override 6 protected String doInBackground(String... params) { 7 8 String urlSt = "http://cake/books/index"; 9 10 HttpURLConnection con = null; 11 String result = null; 12 String word = "word="+params[0]; 13 14 try { 15 URL url = new URL(urlSt); 16 17 con = (HttpURLConnection) url.openConnection(); 18 19 con.setRequestMethod("POST"); 20 21 con.setInstanceFollowRedirects(false); 22 23 con.setDoOutput(true); 24 25 con.setReadTimeout(10000); 26 con.setConnectTimeout(20000); 27 28 con.connect(); 29 30 OutputStream out = null; 31 try { 32 out = con.getOutputStream(); 33 out.write( word.getBytes("UTF-8") ); 34 out.flush(); 35 Log.d("debug","flush"); 36 } catch (IOException e) { 37 e.printStackTrace(); 38 result="POST送信エラー"; 39 } finally { 40 if (out != null) { 41 out.close(); 42 } 43 } 44 45 final int status = con.getResponseCode(); 46 if (status == HttpURLConnection.HTTP_OK) { 47 result="HTTP_OK"; 48 } 49 else{ 50 result="status="+String.valueOf(status); 51 } 52 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } finally { 56 if (con != null) { 57 con.disconnect(); 58 } 59 } 60 return result; 61 } 62 63 @Override 64 protected void onPostExecute(String result) { 65 super.onPostExecute(result); 66 67 if (listener != null) { 68 listener.onSuccess(result); 69 } 70 } 71 72 void setListener(Listener listener) { 73 this.listener = listener; 74 } 75 76 interface Listener { 77 void onSuccess(String result); 78 } 79}

cakephp-controller

php

1class BooksController extends AppController 2{ 3 public function index() 4 { 5 $add = ""; 6 if( isset($this->request->data['id'])){ 7 $id = $this->request->data['id']; 8 $this->set( 'num' , $id); 9 }else{ 10 $this->Flash->error('postエラー', 11 'default', array('class'=>'message_error')); 12 } 13 } 14}

cakephp-index

ctp

1<div> 2<?php 3 if( isset($num) ) 4 { 5 pr($num); 6 } 7?> 8</div>

利用環境
android studio3.1.3
cakephp3
参考にしているサイト
https://akira-watson.com/android/httpurlconnection-post.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

String urlSt = "http://cake/books/index";

ちょっと気になったのですが
最近HttpURLConnectionでアクセス先が http だとエラーになる時があるようで

リンク内容
の参考にされたページのGET版には

エラーというかこのようなログで画像を落とせない場合はSSL通信ではないからです
java.io.IOException: Cleartext HTTP traffic to xxx.com not permitted
ネットワーク セキュリティ構成などを使う必要があります。

ということではないでしょうか
サーバーをSSLにしてみるとどうでしょう

投稿2018/10/05 06:31

aja

総合スコア3733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bluedog

2018/10/06 03:47

回答ありがとうございます。 ご指摘の通りサーバー側をSSLにしてみましたがうまくいきませんでした。 ほかの方のアドバイスでライブラリを使用したところうまくいったのでこの方法で対応したいと考えています。
guest

0

androidについては知識がないので言及できないのですが、
CakePHP側でPOSTのデータが受け取れているか、debug()で確認してみてはいかがでしょうか?
もし$this->request->getData()で取得したPOSTデータの中身が空なら、
そもそもBooksControllerにPOSTできていないと思います。

PHP

1class BooksController extends AppController 2{ 3 public function index() 4 { 5 debug($this->request->getData()); // POSTデータを確認 6 : 7 : 8 } 9}

 
また、CakePHPのバージョン3.4以降は下記の書き方に変更されているので参考までm(_ _)m
(古い書き方でも動作はします)
参考:リクエストのボディーデータ

PHP

1// ~ver 3.3 2$this->request->data['id'] 3 4// ver 3.4~ 5$this->request->getData('id');

投稿2018/09/26 02:36

smnsmn

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bluedog

2018/09/26 14:17

回答ありがとうございます。 ご説明のコードで試してみましたがBooksControllerにPOSTできていない用で空でした。 Log Catのエラーはcakephp側の問題のせいでしょうか?
smnsmn

2018/09/27 04:47

実際にandroidからPOST→index.ctpが表示された時に、 POSTリクエストデータが空という事は、POST自体がうまく行っていないと思います。 (cakePHP側でもエラーは出ていないですよね?) とすれば、cakePHPではなく、JavaのPOST送信処理を見直したほうがいいかと思います。 android-MainActivity android-UploadTask に記載しているURLが `"http:///cake/books/index"`となっており スラッシュが多いのでそれも直してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問