1

私はTwitter4jを使用して、アプリの作成方法を学習するためのTwitterアプリを作成しています。twitter4jサイトからサンプルコードをコピーして、ICS用の非常に基本的なアプリを作成しました。twitter4j apiは、OAuthプロセスのhttpリクエストを送信してから、承認プロセスが行われるWebページを開きます。問題は、アプリがコードのhttpリクエスト部分でスタックすることです。<uses-permission android:name="android.permission.INTERNET"/>マニフェストファイルに権限を追加しました。コードスニペットは以下のとおりです。

        Log.v("storeCredentials", "Started");
        System.out.println("storeCredentials"+" Started");
        Twitter t1 = TwitterFactory.getSingleton();
        t1.setOAuthConsumer(twitter.getConsumerKey(), twitter.getConsumerSecret());
        Log.v("storeCredentials", "consumer set");
        System.out.println("storeCredentials"+" consumer set");
        //ConnectionDetector detective = new ConnectionDetector(this);
        System.out.println("storeCredentials"+" debug 5");
        Log.v("storeCredentials", "connection present");

        //Progress Dialog
        System.out.println("storeCredentials"+" debug 6");
        final ProgressDialog d1 = new ProgressDialog(this);
        System.out.println("storeCredentials"+" debug 7");
        d1.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        d1.setCancelable(false);
        d1.show();


        new Thread(new Runnable(){
            public void run()
            {
                Twitter temp = TwitterFactory.getSingleton();
                temp.setOAuthConsumer(twitter.getConsumerKey(), twitter.getConsumerSecret());
                try
                {
                    RequestToken tempToken = temp.getOAuthRequestToken();
                    AccessToken accessToken = null;
                    System.out.println("storeCredentials"+" debug 10");
                    Log.v("storeCredentials", "tokens init");
                    //BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                        //while (null == accessToken) return true;
                        String url = tempToken.getAuthorizationURL();
                        //String url = "http://www.google.co.in";
                        if (!url.startsWith("https://") && !url.startsWith("http://"))
                        {
                            url = "http://" + url;
                        }
                        Uri webpage = Uri.parse(url);
                        Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
                        Log.v("storeCredentials", "Intent created");
                        System.out.println("storeCredentials"+" Intent created");
                        // Verify it resolves
                        PackageManager packageManager = getPackageManager();
                        List<ResolveInfo> activities = packageManager.queryIntentActivities(webIntent, 0);
                        boolean isIntentSafe = activities.size() > 0;
                        Log.v("Number of browsers", String.valueOf(activities.size()));
                        System.out.println("storeCredentials"+" Number of browsers" + " String.valueOf(activities.size())");
                        // Start an activity if it's safe
                        if (isIntentSafe) 
                        {
                            startActivity(webIntent);
                        }

RequestToken tempToken = temp.getOAuthRequestToken();ブラウザを選択するように求めるプロンプトが表示されないため、アプリがラインに詰まっていると確信しています。twitter4jサイトのサンプルコードは正常に機能します。これをJavaアプリケーションで使用して確認しました。

これが起こる理由はありますか?リクエストを返すには、他の許可も含める必要がありますか?

4

1 に答える 1

1

これは、httpリクエストを実行して、非同期タスクでtwitter4jのリクエストトークンを取得することで解決されました。

public void getRequestToken()       
{
 Log.v("storeCredentials", "Started");
                System.out.println("storeCredentials"+" Started");
                Twitter t1 = TwitterFactory.getSingleton();
                t1.setOAuthConsumer(twitter.getConsumerKey(), twitter.getConsumerSecret());
                Log.v("storeCredentials", "consumer set");
                System.out.println("storeCredentials"+" consumer set");
                //ConnectionDetector detective = new ConnectionDetector(this);
                System.out.println("storeCredentials"+" debug 5");
                Log.v("storeCredentials", "connection present");

                //Progress Dialog
                System.out.println("storeCredentials"+" debug 6");
                final ProgressDialog d1 = new ProgressDialog(this);
                System.out.println("storeCredentials"+" debug 7");
                d1.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                d1.setCancelable(false);
                d1.show();
        new RequestLoginToken().execute(1);
}
    public class RequestLoginToken extends AsyncTask<Integer, Void, RequestToken> {


                        @Override
                        protected RequestToken doInBackground(Integer... params) {
                            int code = params[0].intValue();

                            Twitter temp = TwitterFactory.getSingleton();
                            System.out.println("storeCredentials"+" debug 7");
                            RequestToken tempToken = null;
                            System.out.println("storeCredentials"+" debug 8");
                            try
                            {
                                tempToken = temp.getOAuthRequestToken();
                                System.out.println("storeCredentials"+" debug 9");
                            }
                            catch( Exception e)
                            {
                                System.out.println("Error getting token");
                            }
                            return tempToken;

                        }

                        @Override
                        protected void onPostExecute(RequestToken token)
                        {
                            pd1.dismiss();
                            if(token==null)
                            {
                                Toast.makeText(context, "Try again", Toast.LENGTH_SHORT).show();
                                return;
                            }
                            requestToken = token;
                            pd1.dismiss();
                            flag = true;
                            launchURL(requestToken.getAuthenticationURL());
                        }

                    }
于 2013-03-30T18:05:01.327 に答える