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

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

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

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

Kotlin

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

解決済

registerForActivityResultの使い方

hiro04kon
hiro04kon

総合スコア27

Android Studio

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

Kotlin

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

1回答

0評価

0クリップ

793閲覧

投稿2022/05/30 04:24

Kotlinにてプログラムを勉強中の者です。

作っているもの

kotlinで、ファイラーからファイルを選択し、そのアドレスを取得する

解決したい点

記事を見ながらコードを書いていましたが、javaのコードをKotlinに直していたところ、
startActivityForResultは非推奨という注釈が出たので、直していました。
しかし、intentの渡し方の書き方がいまいち分かりません。

元のjavaコード

java

package com.example.file_url import android.content.Intent; import android.location.GnssAntennaInfo; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; public class MainActivity extends AppCompatActivity { private final static int CHOSE_FILE_CODE = 123; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //URLを読みだして渡す final TextView text1 = (TextView)findViewById(R.id.imageText); Button button_file = (Button)findViewById(R.id.button_file); button_file.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); startActivityForResult(intent, CHOSE_FILE_CODE); } }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { try { if (requestCode == CHOSE_FILE_CODE && resultCode == RESULT_OK) { TextView imageText = (TextView)findViewById(R.id.imageText); String filePath = data.getDataString().replace("file://", ""); String decodedfilePath = URLDecoder.decode(filePath, "utf-8"); imageText.setText(decodedfilePath); } } catch (UnsupportedEncodingException e) { // 例外処理 } }

Kotlinに直して、startActivityForResultを使わないコード

MainActivity.kt

package com.example.file_url import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Button import android.widget.TextView import androidx.activity.result.ActivityResult import androidx.activity.result.ActivityResultCallback import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity import java.io.UnsupportedEncodingException import java.net.URLDecoder class MainActivity : AppCompatActivity() { private val CHOSE_FILE_CODE: Int = 12345 private val file_url = registerForActivityResult(ActivityResultContracts.StartActivityForResult(), ActivityResultCallbackUrl()) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //URLを読みだして渡す val text1 = findViewById<View>(R.id.imageText) as TextView val button_file = findViewById<View>(R.id.button_file) as Button button_file.setOnClickListener { val intent = Intent(Intent.ACTION_GET_CONTENT) intent.type = "*/*" file_url.launch(intent) } } ***ここの受け取り方の記述が分かりません*** private inner class ActivityResultCallbackUrl : ActivityResultCallback<ActivityResult> { fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { try { if (requestCode == CHOSE_FILE_CODE && resultCode == RESULT_OK) { val imageText = findViewById<View>(R.id.imageText) as TextView val filePath = data.dataString!!.replace("file://", "") val decodedfilePath = URLDecoder.decode(filePath, "utf-8") imageText.text = decodedfilePath } } catch (e: UnsupportedEncodingException) { // 例外処理 } } } }

無茶苦茶なコードだと思うのですが…
「//URLを読みだして渡す」をregisterForActivityResultの中に入れる、とか調べたらありましたが、よく分かりません。
お知恵を貸してください…。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Android Studio

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

Kotlin

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