Android: Грешка при споделяне във Facebook Messenger

Опитвам се да поправя тази грешка вече седмица, но все още не мога да открия проблема. Входът работи, но по някаква причина споделянето в Messenger се срива. Наистина не мога да разбера какъв е проблемът. По принцип запазвам текст в говор на моето устройство и след това се опитвам да го споделя. Файлът се запазва на устройството (проверих), но месинджър не споделя.

Ето моят код за споделяне:

public void shareFile(View view) {
    String sayWhat = "This is what you sound like when you write to me, thanks to the app Messenger Say it! Available now at Google Play";
    HashMap hashmap = new HashMap();
    hashmap.put("utteranceId", sayWhat);
    String location = new StringBuilder(Environment.getExternalStorageDirectory().toString()).append("/").append(name).append(".mp3").toString();


    speed = ((float)speedS.getProgress()/100F)*2.0F;
    pitch=((float)pitchS.getProgress()/100F)*2.0F;
    ttsread.setPitch(pitch);
    ttsread.setSpeechRate(speed);
    ttsread.synthesizeToFile(sayWhat, hashmap, location);

    String mimeType = "audio/mpeg";


    Uri contentUri = Uri.parse(location);
    text.setText(contentUri.toString());
    long futuretime = System.currentTimeMillis() + 1000;
    while (System.currentTimeMillis() < futuretime) {
        synchronized (this) {
            try {
                wait(futuretime - System.currentTimeMillis());
            } catch (Exception e) {
            }
        }
    }
   ShareToMessengerParams params = ShareToMessengerParams.newBuilder(contentUri, "audio/mpeg")
            .setMetaData("com.facebook.sdk.ApplicationId")
            .build();
    MessengerUtils.shareToMessenger(this, 1, params);

    //MessengerUtils.finishShareToMessenger(activity,params);

}

и моят logcat:

 java.lang.IllegalStateException: Could not execute method of the activity
            at android.view.View$1.onClick(View.java:3969)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.IllegalArgumentException: Unsupported URI scheme: null
            at com.facebook.messenger.ShareToMessengerParams.<init>(ShareToMessengerParams.java:106)
            at com.facebook.messenger.ShareToMessengerParamsBuilder.build(ShareToMessengerParamsBuilder.java:120)
            at com.inc.nicky.messengersayit.PersonalSettings.shareFile(PersonalSettings.java:205)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at android.view.View$1.onClick(View.java:3964)
            at android.view.View.performClick(View.java:4637)
            at android.view.View$PerformClick.run(View.java:19422)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5586)

person EnderNicky    schedule 15.08.2015    source източник
comment
Опитах също да споделя изображение, което вече беше на телефона ми - отново се срива   -  person EnderNicky    schedule 15.08.2015


Отговори (1)


Трябва да прочетете вашия logcat и да се опитате да разберете какво ви казва.

java.lang.IllegalStateException: Could not execute method of the activity

Добре, защо?

Caused by: java.lang.reflect.InvocationTargetException

Това просто означава, че не е успял да извика целевия метод - така че почти същото като първото съобщение. Все пак..защо?

Caused by: java.lang.IllegalArgumentException: Unsupported URI scheme: null

IllegalArgumentException означава, че нещо не е наред с аргумент, предаден на метод. Където? Намерете първото местоположение във вашия код:

at com.facebook.messenger.ShareToMessengerParams.<init>(ShareToMessengerParams.java:106)
            at com.facebook.messenger.ShareToMessengerParamsBuilder.build(ShareToMessengerParamsBuilder.java:120)
            at com.inc.nicky.messengersayit.PersonalSettings.shareFile(PersonalSettings.java:205)
 ...

Това ви казва, че на ред 205 в PersonalSettings.java има проблем с аргумент. И проблемът е свързан с нулева URI схема, когато се извиква build().

При предположение бих казал, че параметърът contentUri може да е проблемът. Тази стойност е зададена по-рано от Uri contentUri = Uri.parse(location);. Uri.parse(), според документите:

Създава Uri, който анализира дадения кодиран URI низ.

Параметри: uriString: съвместим с RFC 2396, кодиран URI

Малко проучване на URI (като помощ от този въпрос) ни кара да видим че uriString трябва да има схема като http:// или file:// в началото на низа.

Във вашия случай вие извиквате Uri.parse с обикновено име на файл без схема, което води до грешката, представена ви в logcat.

Добавянето на подходяща схема или използването на помощна функция от класа Uri трябва да помогне за отстраняването на проблема:

 Uri contentUri = Uri.fromFile(new File(location));
person adelphus    schedule 15.08.2015