MediaMetadataRetriever дает исключение RunTimeException - PullRequest
0 голосов
/ 26 февраля 2019

В моем public void onActivityResult(int requestCode, int resultCode, Intent data) { ... есть такая часть:

if (requestCode == 1) {
                    // Make sure the request was successful

                        final Uri videoUri = data.getData();

                    MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//use one of overloaded setDataSource() functions to set your data source
                    retriever.setDataSource(getActivity(), videoUri);
                    String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
                    timeInMillisec = Long.parseLong(time );

                    retriever.release();

Здесь я пытаюсь получить продолжительность видео, используя MediaMetadataRetriever, и сохраняю в timeInMillisec,затем я проверяю значение timeInMillisec для любой ошибки:

Toast.makeText(getActivity(), (int) timeInMillisec, Toast.LENGTH_SHORT).show();

Дело в том, что здесь у меня есть это исключение:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.zub.videoplay, PID: 9399
    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65537, result=-1, data=Intent { dat=content://com.miui.gallery.open/raw//storage/emulated/0/Download/Air Supply - All Out Of Love.mp4 typ=video/mp4 flg=0x1 }} to activity {com.example.zub.videoplay/com.example.zub.videoplay.HomeActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x37c3f
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4179)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4222)
        at android.app.ActivityThread.-wrap20(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6238)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
     Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x37c3f
        at android.content.res.Resources.getText(Resources.java:351)
        at android.content.res.MiuiResources.getText(MiuiResources.java:97)
        at android.widget.Toast.makeText(Toast.java:285)
        at com.example.zub.videoplay.onActivityResult(PostFragment.java:293)
        at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:151)
        at com.example.zub.videoplay.HomeActivity.onActivityResult(HomeActivity.java:586)
        at android.app.Activity.dispatchActivityResult(Activity.java:7132)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:4175)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:4222) 
        at android.app.ActivityThread.-wrap20(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1581) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:163) 
        at android.app.ActivityThread.main(ActivityThread.java:6238) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 
I/Process: Sending signal. PID: 9399 SIG: 9

Я не могу понять, что здесь не так,Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Проблема в этой строке

Toast.makeText(getActivity(), (int) timeInMillisec, Toast.LENGTH_SHORT).show();

Она вызовет makeText метод класса Toast, потому что нет ресурса с идентификатором timeInMillisec, поэтому метод выдает Resources.NotFoundException исделать ваше приложение аварийным.

Решение: Измените код на

Toast.makeText(getActivity(), timeInMillisec + "", Toast.LENGTH_SHORT).show();

или

Toast.makeText(getActivity(), String.valueOf(timeInMillisec), Toast.LENGTH_SHORT).show();
0 голосов
/ 26 февраля 2019

Вот важная часть трассировки стека:

Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x37c3f
    at android.content.res.Resources.getText(Resources.java:351)
    at android.content.res.MiuiResources.getText(MiuiResources.java:97)
    at android.widget.Toast.makeText(Toast.java:285)
    at com.example.zub.videoplay.onActivityResult(PostFragment.java:293)
    at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:151)
    at com.example.zub.videoplay.HomeActivity.onActivityResult(HomeActivity.java:586)

Похоже, что в HomeActivity.onActivityResult вы пытаетесь показать строку (ID # 0x37c3f) через Toast, которая не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...