#android #kotlin
Вопрос:
Я новичок в разработке Android с использованием Kotlin. Я пытаюсь практиковать загрузку изображения с мобильного телефона в свое приложение, используя некоторые методы, указанные в приведенном ниже коде. все работает просто отлично с некоторыми процессами, такими как я могу выбрать в окне просмотра изображений, а затем во всплывающем окне, которое позволяет мне выбрать изображение в моем телефоне. к сожалению, после выбора изображения оно отображается пустым/пустым, ничего не отображается в приложении. Я пытался обратиться за помощью, но у меня ничего не вышло. Надеюсь, я смогу помочь здесь. заранее спасибо!
Код деятельности
package student
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.BitmapFactory
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import com.example.amazontutoringcenter.databinding.ActivityMainBinding
import com.example.amazontutoringcenter.databinding.ActivityStudentClassroomBinding
import com.squareup.picasso.Picasso
class StudentClassroomActivity: AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.imageView.setOnClickListener {
checkPermission()
}
}
val READ_IMAGE:Int=338
private fun checkPermission(){
if(Build.VERSION.SDK_INT>=23){
if(ActivityCompat.checkSelfPermission(this,
android.Manifest.permission.READ_EXTERNAL_STORAGE)!=
PackageManager.PERMISSION_GRANTED){
requestPermissions(arrayOf( android.Manifest.permission.READ_EXTERNAL_STORAGE),READ_IMAGE)
return
}
}
loadImage()
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
when(requestCode){
READ_IMAGE->{
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
loadImage()
}else{
Toast.makeText(applicationContext,"Cannot access your images",Toast.LENGTH_LONG).show()
}
}
else-> super.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}
val PICK_IMAGE_CODE=123
private fun loadImage(){
var intent=Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startActivityForResult(intent,PICK_IMAGE_CODE)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if(requestCode==PICK_IMAGE_CODE amp;amp; data!=null amp;amp; resultCode == RESULT_OK){
val selectedImage=data.data
val filePathColum= arrayOf(MediaStore.Images.Media.DATA)
val cursor= contentResolver.query(selectedImage!!,filePathColum,null,null,null)
cursor!!.moveToFirst()
val coulomIndex=cursor!!.getColumnIndex(filePathColum[0])
val picturePath=cursor!!.getString(coulomIndex)
cursor!!.close()
//.load(picturePath).into(binding.imageStudentProfile)
//Picasso.get().load(picturePath).fit().into(binding.imageStudentProfile)
binding.imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath))
}
}
}
XML-файл
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@ id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test Layout"
android:layout_marginTop="50dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@ id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@ id/textView2"
android:src="@drawable/ic_attendant"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Комментарии:
1. Удалите код, в
onActivityResult()
котором запрашиваетсяMediaStore
. Просто перейдитеUri
в свою любимую библиотеку загрузки изображений (Glide, Coil, Picasso и т.д.).2. Чувак, теперь это работает
Ответ №1:
В ImageView есть элемент для загрузки изображения из uri.
И у вас есть uri data.data
.
Так что используй это.
Комментарии:
1. Я ничего не понял. не могли бы вы упростить еще больше, пожалуйста?
2. Что-то вроде ImageView.setImageUri(данные.данные).
3. Чувак, теперь это работает