Как решить ошибку Photopicker в Android Studio?

У меня есть следующий код, я получаю сообщение об ошибке:

введите описание изображения здесь

      package com.example.photopicker;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.PickVisualMediaRequest;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    Button addimage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addimage=findViewById(R.id.button_pick_photo);
       addimage.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
            // Registers a photo picker activity launcher in single-select mode.
               ActivityResultLauncher<PickVisualMediaRequest> pickMedia =
                       registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), uri -> {
                           // Callback is invoked after the user selects a media item or closes the
                           // photo picker.
                           if (uri != null) {
                               Log.d("PhotoPicker", "Selected URI: " + uri);
                           } else {
                               Log.d("PhotoPicker", "No media selected");
                           }
                       });

            // Include only one of the following calls to launch(), depending on the types
            // of media that you want to allow the user to choose from.

             // Launch the photo picker and allow the user to choose images and videos.
               pickMedia.launch(new PickVisualMediaRequest.Builder()
                       **.setMediaType(new  ActivityResultContracts.PickVisualMedia.ImageAndVideo())**
                       .build());
           }
       });
    }
}

Этот код я получил с веб-сайта разработчика Android: https://developer.android.com/training/data-storage/shared/photopicker .

но, похоже, не работает, и я не могу найти какое-либо онлайн-решение.

3 ответа

Попробуйте заменить:

      new ActivityResultContracts.PickVisualMedia.ImageAndVideo()

с:

      ActivityResultContracts.PickVisualMedia.Companion.getImageAndVideo()

ImageAndVideoэто Котлинobject— это не класс, который вы создаете сами. Однако в исходном коде отсутствует@JvmFieldаннотация, поэтому я думаю, что просто ссылаясь наActivityResultContracts.PickVisualMedia.ImageAndVideoпотерпит неудачу, как указано в документах .

Я только вчера это выяснил. Это очень простой код из нескольких строк, но мне потребовался целый день, чтобы понять, что не так. Просто добавьте следующий фрагмент вашего кода за пределами прослушивателя кликов вверху. Похоже, переменная не инициализируется вовремя для запуска, отсюда и ошибка.

      ActivityResultLauncher<PickVisualMediaRequest> pickMedia =
                       registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), uri -> {
                           // Callback is invoked after the user selects a media item or closes the
                           // photo picker.
                           if (uri != null) {
                               Log.d("PhotoPicker", "Selected URI: " + uri);
                           } else {
                               Log.d("PhotoPicker", "No media selected");
                           }
                       });

-------------------------------------------------------------
************** MY CODE FOR REFERENCE*************************
-------------------------------------------------------------
class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var binding: ActivityMainBinding
    private val REQUEST_CODE_SINGLE_SELECT = 1
    private var pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
        // Callback is invoked after the user selects a media item or closes the
        // photo picker.
        if (uri != null) {
            Log.d("PhotoPicker", "Selected URI: $uri")
        } else {
            Log.d("PhotoPicker", "No media selected")
        }
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        WindowCompat.setDecorFitsSystemWindows(window, false)
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        setSupportActionBar(binding.toolbar)

        val navController = findNavController(R.id.nav_host_fragment_content_main)
        appBarConfiguration = AppBarConfiguration(navController.graph)
        setupActionBarWithNavController(navController, appBarConfiguration)

        binding.fab.setOnClickListener {
            // Launch the photo picker and let the user choose only images.
            pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
        }
    }

Использовать это:

      new PickVisualMediaRequest.Builder()
    .setMediaType(PickVisualMedia.ImageAndVideo.INSTANCE)
    .build()

Он может показать ошибку, но все равно скомпилируется нормально.

Другие вопросы по тегам