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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Android

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

1回答

842閲覧

Kotlin/Android + LAMP環境でResult::NOT_SUPPORTEDエラー

Yakusugi

総合スコア123

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Android

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2023/02/06 04:16

編集2023/02/06 11:06

Kotlinを使ってアプリのログイン画面を作成しています。
今回はMVCモデルを採用しており、下記LoginActivity.kt→BudgetTrackerUserDao.ktの「logIn」関数を用いて ログインを行いたいのですが、
結果としては、TOASTメッセージで私が設定した「"Login failed!"」の文字が画面に表示され、
当方で確認できる限りでは、表示されたエラーは下記のみでした。

エラー文

device/generic/goldfish/audio/stream_out.cpp:updateSourceMetadata:378 failure: Result::NOT_SUPPORTED

当該エラー内容でググってみたのですが、検索結果数が少ないのと、該当する結果が得られなかったため、詰まっております。

LoginActivity.kt

1try { 2 budgetTrackerUserDao.logIn(budgetTrackerUserDto) { result -> 3 if (result == 1) { 4 Toast.makeText(this@LoginActivity, "Login successful!", Toast.LENGTH_SHORT).show() 5 val intent = Intent(this, MainActivity::class.java) 6 startActivity(intent) 7 } else { 8 Toast.makeText(this@LoginActivity, "Login failed!", Toast.LENGTH_SHORT).show() 9 } 10 } 11 } catch (e: IOException) { 12 Toast.makeText(this@LoginActivity, "Error in logging in!", Toast.LENGTH_SHORT).show() 13 e.printStackTrace() 14 15 }

BudgetTrackerUserDao.kt

1fun logIn(budgetTrackerUserDto: BudgetTrackerUserDto, callback: (result: Int) -> Unit) { 2 var result = 0 3 try { 4 val properties = Properties() 5 val inputStream = context.assets.open("server_config.properties") 6 properties.load(inputStream) 7 val serverUrl = properties.getProperty("server_url") 8 val phpLoginFile = properties.getProperty("login_php_file") 9 val loginUrl = "$serverUrl$phpLoginFile" 10 Log.d("login_url", loginUrl) 11 val stringRequest = object : StringRequest(Method.POST, loginUrl, 12 Response.Listener { response -> 13 if (!response.isEmpty()) { 14 try { 15 val jsonObject = JSONObject(response) 16 val success = jsonObject.getInt("success") 17 if (success == 1) { 18 result = 1 19 } 20 } catch (e: JSONException) { 21 Log.e("JSONException", e.toString()) 22 } 23 } 24 callback(result) 25 }, 26 Response.ErrorListener { error -> 27 if (context != null) { 28 Toast.makeText(context, "Unable to send data $error", Toast.LENGTH_SHORT).show() 29 } 30 Log.e("VolleyError", error.toString()) 31 callback(result) 32 }) { 33 @Throws(AuthFailureError::class) 34 override fun getParams(): Map<String, String> { 35 val params = HashMap<String, String>() 36 params["user_name"] = budgetTrackerUserDto.getId() 37 params["password"] = budgetTrackerUserDto.getPassword() 38 return params 39 } 40 } 41 val requestQueue = Volley.newRequestQueue(context) 42 requestQueue.add(stringRequest) 43 } catch (e: IOException) { 44 e.printStackTrace() 45 } 46 } 47

バックエンドサーバの開発環境は以下の通りです。
今回はLAMPを用いて言います。
OS: Ubuntu Server 20.04
Apache: Apache/2.4.41 (Ubuntu)
MySQL: 8.0.32-0ubuntu0.20.04.2 for Linux on x86_64
PHP: PHP 8.1.14 (cli)

流れとしては、/var/www/androidに下記userRegistrationInsert.phpを用意しており、
こちらがAndroid端末から新規ユーザ情報を受け取るAPIとして機能しています。

-rw-r--r-- 1 root root 890 Feb 4 11:07 loginToTheSystem.php

上記の通り、エラーメッセージがNOT_SUPPORTEDのみのため、
解決案をご提示いただける方がおられましたら、ご回答の程よろしくお願いいたします。

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

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

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

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

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

hoshi-takanori

2023/02/06 05:18

まず、エラー文の > device/generic/goldfish/audio/stream_out.cpp:updateSourceMetadata:378 failure: Result::NOT_SUPPORTED はたぶん今回の件とは無関係の、Android 内部で起きているエラーだと思われます。 で、Login failed! の原因ですが、「logIn」関数は通信処理を非同期で行うため、通信結果が帰る前に result = 0 のまま return result してるからでしょうね。
Yakusugi

2023/02/06 05:54

いつもコメントありがとうございます。 私の方でも継続して調べてみます。
guest

回答1

0

ベストアンサー

とりあえずコールバック関数を渡す方法で書くとこんな感じでしょうか。
参考: Kotlinでリスナーやコールバックをスッキリと書く【関数リテラルとSAM変換】 - Qiita

LoginActivity.kt

kt

1 budgetTrackerUserDao.logIn(budgetTrackerUserDto) { result -> 2 if (result == 1) { 3 Toast.makeText(this@LoginActivity, "Login successful!", Toast.LENGTH_SHORT).show() 4 val intent = Intent(this, MainActivity::class.java) 5 startActivity(intent) 6 } else { 7 Toast.makeText(this@LoginActivity, "Login failed!", Toast.LENGTH_SHORT).show() 8 } 9 }

BudgetTrackerUserDao.kt (変更部分のみ)

diff

1 // 戻り値をなくし、引数 callback を追加 2- fun logIn(budgetTrackerUserDto: BudgetTrackerUserDto): Int { 3+ fun logIn(budgetTrackerUserDto: BudgetTrackerUserDto, callback: (result: Int) -> Unit) { 4 var result = 0 5 try { 6 // 略 7 Response.Listener { response -> 8 if (!response.isEmpty()) { 9 // 略 10 } 11 // コールバック関数を呼び出す 12+ callback(result) 13 }, 14 Response.ErrorListener { error -> 15 if (context != null) { 16 Toast.makeText(context, "Unable to send data $error", Toast.LENGTH_SHORT).show() 17 } 18 Log.e("VolleyError", error.toString()) 19 // コールバック関数を呼び出す 20+ callback(result) 21 }) { 22 // 略 23 } catch (e: IOException) { 24 e.printStackTrace() 25 } 26 // 戻り値をなくす 27- return result 28 }

通信処理中も UI イベントは処理されますので、ログインボタンなどは押せなくした方が良いかも。
あと、コルーチンってのを使う書き方もありますが、初心者にはちょっと難しいと思うので、パス。

投稿2023/02/06 08:56

hoshi-takanori

総合スコア7895

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

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

Yakusugi

2023/02/06 11:13 編集

ご回答頂きありがとうございます。 頂いたコードで再実装してみたのですが、 またLogin Failureになってしまいました。。。 私の方でも再度、検索しながら原因を探してみます。 エラー文も表示されないため、原神の特定に時間がかかりそうです。。。 
hoshi-takanori

2023/02/06 11:38

それは残念。Logcat に何か出てませんか?
Yakusugi

2023/02/06 23:49

Logcatを確認してみたのですが、前回と同じ下記エラーしか、エラーらしきものは確認できませんでした。 device/generic/goldfish/audio/stream_out.cpp:updateSourceMetadata:378 failure: Result::NOT_SUPPORTED
Yakusugi

2023/02/06 23:53

サーバは2台あり、上記エラーはAWS上のサーバで発生していました。 もう一台、自宅PC内のVirtual Boxのサーバにも同じ環境を用意しており、 こちらでは下記エラーが確認出来ました。 IGmsServiceBroker.getService failed android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died, but this could also be caused by running out of binder buffe at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:584) at wik.gf(:com.google.android.gms@221821047@22.18.21 (190800-453244992):5) at wgq.y(:com.google.android.gms@221821047@22.18.21 (190800-453244992):13) at vpy.run(:com.google.android.gms@221821047@22.18.21 (190800-453244992):5) at android.os.Handler.handleCallback(Handler.java:942) at android.os.Handler.dispatchMessage(Handler.java:99) at amoz.ki(:com.google.android.gms@221821047@22.18.21 (190800-453244992):0) at amoz.dispatchMessage(:com.google.android.gms@221821047@22.18.21 (190800-453244992):11) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.os.HandlerThread.run(HandlerThread.java:67)
hoshi-takanori

2023/02/07 00:38

うーん、そのエラーも関係なさそうな気が…。とりあえず、サーバーの問題なのかアプリの問題なのかを切り分ける必要がありそう。Postman とか curl コマンドとかで API を直接叩いて確認してみては。
Yakusugi

2023/02/07 01:02

適切なアドバイスありがとうございます。 Postmanでたたいてみたところ、500 Internal Server Errorが発生しました。 こちらは、AWSです。 自宅PC内のVirtual BoxのサーバはOKでした。
Yakusugi

2023/02/07 01:06

500 Internal Server ErrorってPHPの方に問題がある可能性があるので、確認してみます。 
Yakusugi

2023/02/07 10:06

PHPを修正してみましたが、AWSの方では、下記エラーが表示されるため。サーバ側に原因があるように見受けられます。 android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died, but this could also be caused by running out of binder buffer
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問