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

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

新規登録して質問してみよう
ただいま回答率
86.02%
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

解決済

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

Yakusugi
Yakusugi

総合スコア120

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

1回答

0グッド

0クリップ

236閲覧

投稿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のみのため、
解決案をご提示いただける方がおられましたら、ご回答の程よろしくお願いいたします。

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

回答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

総合スコア7796

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

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