Android 百分比符号使Twitter应用程序崩溃

Android 百分比符号使Twitter应用程序崩溃,android,twitter,Android,Twitter,我正在创建一个Android应用程序,允许用户创建推文,然后在Twitter上打开推文,这样他们就可以发布推文了。我使用以下代码获取他们输入的文本并将其发送到Twitter: String tweetUrl = "https://twitter.com/intent/tweet?text=" + URLEncoder.encode(mTweetTextBox.getText().toString()); Uri uri = Uri.parse(tweetUrl); startActivity(n

我正在创建一个Android应用程序,允许用户创建推文,然后在Twitter上打开推文,这样他们就可以发布推文了。我使用以下代码获取他们输入的文本并将其发送到Twitter:

String tweetUrl = "https://twitter.com/intent/tweet?text=" + URLEncoder.encode(mTweetTextBox.getText().toString());
Uri uri = Uri.parse(tweetUrl);
startActivity(new Intent(Intent.ACTION_VIEW, uri));
这一切似乎在编码特殊字符方面都很好,除非用户输入百分号。如果他们选择使用Twitter,这会导致Twitter应用程序崩溃,但如果他们选择在Chrome中打开推文,它可以正常工作。你知道问题可能是什么,或者我如何解决这个问题吗

这是控制台输出:

03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread.access$800(ActivityThread.java:139)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.os.Handler.dispatchMessage(Handler.java:102)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.os.Looper.loop(Looper.java:136)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread.main(ActivityThread.java:5102)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at java.lang.reflect.Method.invokeNative(Native Method)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at java.lang.reflect.Method.invoke(Method.java:515)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at dalvik.system.NativeStart.main(Native Method)
03-29 12:50:12.705: E/AndroidRuntime(24458): Caused by: java.lang.IllegalArgumentException: Invalid % sequence at 5: test % tweet
03-29 12:50:12.705: E/AndroidRuntime(24458):    at libcore.net.UriCodec.decode(UriCodec.java:169)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at java.net.URLDecoder.decode(URLDecoder.java:60)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.twitter.library.util.Util.b(Twttr:369)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.twitter.android.UrlInterpreterActivity.c(Twttr:631)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.twitter.android.UrlInterpreterActivity.b(Twttr:237)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at com.twitter.android.client.BaseFragmentActivity.onCreate(Twttr:313)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.Activity.performCreate(Activity.java:5248)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
03-29 12:50:12.705: E/AndroidRuntime(24458):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173)
03-29 12:50:12.705: E/AndroidRuntime(24458):    ... 11 more
很明显,它导致了一个非法的辩论异常,但我不知道如何避免这个问题。

。如果您想发送“test%tweet”,您可以使用:


这很有效,谢谢!只是想知道为什么
urlcoder.encode
不会自动编码百分号?实际上是这样的。如果您调用
System.out.println(urlcoder.encode(“test%tweet”,“UTF-8”))
,您会看到它的编码是正确的,但我无法说明为什么它在您的情况下不起作用。这个错误似乎发生在Twitter端,所以我猜他们在做什么。@SamG-H我不知道为什么我在我的帖子中没有提到这一点,我想我更专注于解决它。您正确地使用了
urlcoder.encode
    try {
        final String tweetUrl = "https://twitter.com/intent/tweet?text="
                + URLEncoder.encode("test %25 tweet", "UTF-8");
        final Uri uri = Uri.parse(tweetUrl);
        startActivity(new Intent(Intent.ACTION_VIEW, uri));
    } catch (final UnsupportedEncodingException e) {
        e.printStackTrace();
    }