2

我已经尝试修复这个错误一周了,但仍然找不到问题。登录正在工作,但由于某种原因,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);

}

和我的日志:

 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)
4

1 回答 1

3

您需要阅读您的 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)
 ...

所以这告诉你,在 PersonalSettings.java 的第 205 行,参数有问题。build()问题在于调用时与空 URI 方案有关。

猜测一下,我会说 contentUri 参数可能是问题所在。该值由 较早设置Uri contentUri = Uri.parse(location);Uri.parse()根据文档

创建一个解析给定编码 URI 字符串的 Uri。

参数:uriString:符合 RFC 2396 的编码 URI

对 URI 的一些研究(比如来自这个问题的帮助)让我们看到uriString需要在字符串的开头有一个类似http://or 的方案。file://

在您的情况下,您使用没有 schemeUri.parse的普通文件名调用,导致 logcat 中出现错误。

添加适当的方案或使用Uri类中的辅助函数应该有助于解决问题:

 Uri contentUri = Uri.fromFile(new File(location));
于 2015-08-15T22:21:05.797 回答