5474


現在TwitterとAndroidを連携させたアプリを作っています。  
Twitterの認証ページに飛ぶと「連携アプリを認証」と「キャンセル」というボタンがあり、「連携アプリを認証」を押すと認証が終わり投稿できるのですが、認証ページで「キャンセル」を押すと
`java.lang.RuntimeException: An error occured while executing
doInBackground()`というエラーが返ってきてアプリが落ちてしまいます。多分僕が予想するに、キャンセルボタンが押されても「連携アプリを認証」が押された時のような投稿処理が行われているのかなと思います。  
そこでキャンセルボタンが押されたことを検知したいのですが、検知する方法はあるのでしょうか？ご教授いただけますと幸いです。ちなみに`Twitter4J`というライブラリを使っています。すみませんが、よろしくお願いします。

[code]

    java.lang.RuntimeException: An error occured while executing doInBackground()
                at android.os.AsyncTask$3.done(AsyncTask.java:300)
                at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                at java.lang.Thread.run(Thread.java:841)
         Caused by: java.lang.NullPointerException
                at libcore.net.UriCodec.encode(UriCodec.java:132)
                at java.net.URLEncoder.encode(URLEncoder.java:57)
                at twitter4j.HttpParameter.encode(HttpParameter.java:261)
                at twitter4j.auth.OAuthAuthorization.encodeParameters(OAuthAuthorization.java:384)
                at twitter4j.auth.OAuthAuthorization.encodeParameters(OAuthAuthorization.java:367)
                at twitter4j.auth.OAuthAuthorization.normalizeRequestParameters(OAuthAuthorization.java:351)
                at twitter4j.auth.OAuthAuthorization.generateAuthorizationHeader(OAuthAuthorization.java:198)
                at twitter4j.auth.OAuthAuthorization.generateAuthorizationHeader(OAuthAuthorization.java:250)
                at twitter4j.auth.OAuthAuthorization.getAuthorizationHeader(OAuthAuthorization.java:66)
                at twitter4j.HttpClientImpl.setHeaders(HttpClientImpl.java:207)
                at twitter4j.HttpClientImpl.handleRequest(HttpClientImpl.java:90)
                at twitter4j.HttpClientBase.request(HttpClientBase.java:53)
                at twitter4j.HttpClientBase.post(HttpClientBase.java:82)
                at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:124)
                at twitter4j.auth.OAuthAuthorization.getOAuthAccessToken(OAuthAuthorization.java:138)
                at twitter4j.TwitterBaseImpl.getOAuthAccessToken(TwitterBaseImpl.java:328)
                at com.example.appdev.ipsns.twitter.TwitterOAuthActivity$2.doInBackground(TwitterOAuthActivity.java:77)
                at com.example.appdev.ipsns.twitter.TwitterOAuthActivity$2.doInBackground(TwitterOAuthActivity.java:73)
                at android.os.AsyncTask$2.call(AsyncTask.java:288)
                at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                at java.lang.Thread.run(Thread.java:841)
    
[/code]


CC BY-SA 3.0
2015-01-27T06:56:22.363
5407
2015-01-28T01:46:14.570
2015-01-27T07:48:14.537
5210
5210
question
android twitter4j
Twitterの認証画面でのキャンセルボタンの検知


OAuth認証でキャンセルボタンが押されると、callbackで指定したURLにdeniedが付くので、deniedが付いていたら〜をするという処理にすると自分のやりたいことができました。  
具体的に実装は以下のように行いました。

[code]

        public void newIntent(final Intent intent) {
            if (intent == null
                    || intent.getData() == null
                    || !intent.getData().toString().startsWith(mCallbackURL)) {
                return;
            }
    
                ・
                ・
                ・
    
                @Override
                protected AccessToken doInBackground(String... params) {
                    Pattern p = Pattern.compile("denied");
                    Matcher m = p.matcher(intent.getData().toString());    //intent.getData().toString()でcallbackURLが取得できる
                    try {
                        if (m.find()) {
                            //キャンセルが押された(callbackURLにdeniedが含まれていた)時の処理
                        }
    
[/code]


CC BY-SA 3.0
2015-01-28T01:46:14.570
5474
2015-01-28T01:46:14.570
5210
5407
answer