2
我正在創建一個Android應用程序,允許用戶創建推文,然後在Twitter中打開它們,以便他們發佈推文。我使用下面的代碼來獲得他們所輸入文本,並將其發送到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
顯然它引起IllegalArgumentException
但我不知道怎麼去解決這個問題。
This Works,thanks!只是想知道爲什麼'URLEncoder.encode'不會自動編碼百分號? –
嗯,它確實如此。如果你調用了'System.out.println(URLEncoder.encode(「test%tweet」,「UTF-8」))''你會發現它的編碼是正確的,但我不能說爲什麼它不能在你的案件。這個錯誤似乎發生在Twitter的結尾,所以我猜他們正在做一些事情。 – adneal
@ SamG-H我不知道爲什麼我在我的文章中沒有提到,我想我更關注解決它。你正確使用'URLEncoder.encode'。 – adneal