Kotlinにてプログラムを勉強中の者です。
作っているもの
kotlinで、ファイラーからファイルを選択し、そのアドレスを取得する
解決したい点
記事を見ながらコードを書いていましたが、javaのコードをKotlinに直していたところ、
startActivityForResultは非推奨という注釈が出たので、直していました。
しかし、intentの渡し方の書き方がいまいち分かりません。
元のjavaコード
java
1package com.example.file_url 2 3import android.content.Intent; 4import android.location.GnssAntennaInfo; 5import android.os.Bundle; 6import android.view.View; 7import android.widget.Button; 8import android.widget.TextView; 9import androidx.appcompat.app.AppCompatActivity; 10import java.io.UnsupportedEncodingException; 11import java.net.URLDecoder; 12 13public class MainActivity extends AppCompatActivity { 14 private final static int CHOSE_FILE_CODE = 123; 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 20 //URLを読みだして渡す 21 final TextView text1 = (TextView)findViewById(R.id.imageText); 22 Button button_file = (Button)findViewById(R.id.button_file); 23 button_file.setOnClickListener(new View.OnClickListener() { 24 @Override 25 public void onClick(View v) { 26 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 27 intent.setType("*/*"); 28 startActivityForResult(intent, CHOSE_FILE_CODE); 29 } 30 }); 31 32 @Override 33 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 34 try { 35 if (requestCode == CHOSE_FILE_CODE && resultCode == RESULT_OK) { 36 TextView imageText = (TextView)findViewById(R.id.imageText); 37 String filePath = data.getDataString().replace("file://", ""); 38 String decodedfilePath = URLDecoder.decode(filePath, "utf-8"); 39 imageText.setText(decodedfilePath); 40 } 41 } catch (UnsupportedEncodingException e) { 42 // 例外処理 43 } 44 }
Kotlinに直して、startActivityForResultを使わないコード
MainActivity.kt
1package com.example.file_url 2 3import android.content.Intent 4import android.os.Bundle 5import android.view.View 6import android.widget.Button 7import android.widget.TextView 8import androidx.activity.result.ActivityResult 9import androidx.activity.result.ActivityResultCallback 10import androidx.activity.result.contract.ActivityResultContracts 11import androidx.appcompat.app.AppCompatActivity 12import java.io.UnsupportedEncodingException 13import java.net.URLDecoder 14 15class MainActivity : AppCompatActivity() { 16 private val CHOSE_FILE_CODE: Int = 12345 17 private val file_url = registerForActivityResult(ActivityResultContracts.StartActivityForResult(), ActivityResultCallbackUrl()) 18 19 override fun onCreate(savedInstanceState: Bundle?) { 20 super.onCreate(savedInstanceState) 21 setContentView(R.layout.activity_main) 22 23 //URLを読みだして渡す 24 val text1 = findViewById<View>(R.id.imageText) as TextView 25 val button_file = findViewById<View>(R.id.button_file) as Button 26 button_file.setOnClickListener { 27 val intent = Intent(Intent.ACTION_GET_CONTENT) 28 intent.type = "*/*" 29 file_url.launch(intent) 30 } 31 } 32 33***ここの受け取り方の記述が分かりません*** 34 private inner class ActivityResultCallbackUrl : ActivityResultCallback<ActivityResult> { 35 fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { 36 try { 37 if (requestCode == CHOSE_FILE_CODE && resultCode == RESULT_OK) { 38 val imageText = findViewById<View>(R.id.imageText) as TextView 39 val filePath = data.dataString!!.replace("file://", "") 40 val decodedfilePath = URLDecoder.decode(filePath, "utf-8") 41 imageText.text = decodedfilePath 42 } 43 } catch (e: UnsupportedEncodingException) { 44 // 例外処理 45 } 46 } 47 } 48}
無茶苦茶なコードだと思うのですが…
「//URLを読みだして渡す」をregisterForActivityResultの中に入れる、とか調べたらありましたが、よく分かりません。
お知恵を貸してください…。

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/05/30 06:46