Проблема с OAuth, Twitter и Android: сбой в http-связи с сервером

У кого-нибудь есть рабочий пример аутентификации OAuth для twitter с Android? Я попытался использовать Twitter4J и SignPost, но я получаю очень странные ошибки, говоря, что twitter.com – неизвестный хост. Я не понимаю, что есть проблема ( под Google Android ) с библиотекой SignPost и Android, и согласно домашней странице проекта, классы CommonsHttpOAuth * будут работать.

Вот мой SignPost:

private void getReqTokenAndAuthenticateUsingSignPost() { String callbackUrl = "twitter-test:///"; CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET); CommonsHttpOAuthProvider provider = new CommonsHttpOAuthProvider( "http://twitter.com/oauth/request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); String tokenStr = consumer.getToken(); String tokenSecretStr = consumer.getTokenSecret(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); Editor edit = preferences.edit(); edit.putString(REQ_TOKEN, tokenStr); edit.putString(REQ_TOKEN_SECRET, tokenSecretStr); try { String authUrl = provider.retrieveRequestToken(consumer, callbackUrl); Uri authenticationUri = Uri.parse(authUrl); startActivity(new Intent(Intent.ACTION_VIEW, authenticationUri)); } catch (OAuthMessageSignerException e) { e.printStackTrace(); } catch (OAuthNotAuthorizedException e) { e.printStackTrace(); } catch (OAuthExpectationFailedException e) { e.printStackTrace(); } catch (OAuthCommunicationException e) { e.printStackTrace(); } } 

И вот мой код для Twitter4J:

 private void getReqTokenAndAuthenticateUsingTwitter4J() { String callbackUrl = "twitter-test:///"; try { // Prepare a request token, based on consumer key and consumer // secret ConfigurationBuilder builder = new ConfigurationBuilder(); builder.setOAuthConsumerKey(CONSUMER_KEY); builder.setOAuthConsumerSecret(CONSUMER_SECRET); Configuration cfg = builder.build(); Twitter t = new TwitterFactory(cfg).getInstance(); RequestToken requestToken = t.getOAuthRequestToken(callbackUrl); String tokenStr = requestToken.getToken(); String tokenSecretStr = requestToken.getTokenSecret(); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); Editor edit = preferences.edit(); edit.putString(REQ_TOKEN, tokenStr); edit.putString(REQ_TOKEN_SECRET, tokenSecretStr); if (edit.commit()) { // Launch the browser for authentication in twitter's web-gui Uri authenticationUri = Uri.parse(requestToken.getAuthenticationURL()); startActivity(new Intent(Intent.ACTION_VIEW, authenticationUri)); } } catch (TwitterException e) { e.printStackTrace(); } } 

И да, у меня есть манифест с разрешением на использование Интернета и фильтр намерений для обратного вызова. Вот результат logcat при запуске кода SignPost:

 W/System.err( 779): oauth.signpost.exception.OAuthCommunicationException: Communication with the service provider failed: twitter.com W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:214) W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69) W/System.err( 779): at com.examples.twitterimages.TwitterImagesActivity.getReqTokenAndAuthenticateUsingSignPost(TwitterImagesActivity.java:109) W/System.err( 779): at com.examples.twitterimages.TwitterImagesActivity.onCreate(TwitterImagesActivity.java:64) W/System.err( 779): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) W/System.err( 779): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) W/System.err( 779): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) W/System.err( 779): at android.app.ActivityThread.access$1500(ActivityThread.java:121) W/System.err( 779): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) W/System.err( 779): at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err( 779): at android.os.Looper.loop(Looper.java:123) W/System.err( 779): at android.app.ActivityThread.main(ActivityThread.java:3701) W/System.err( 779): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 779): at java.lang.reflect.Method.invoke(Method.java:507) W/System.err( 779): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) W/System.err( 779): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) W/System.err( 779): at dalvik.system.NativeStart.main(Native Method) W/System.err( 779): Caused by: java.net.UnknownHostException: twitter.com W/System.err( 779): at java.net.InetAddress.lookupHostByName(InetAddress.java:506) W/System.err( 779): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) W/System.err( 779): at java.net.InetAddress.getAllByName(InetAddress.java:256) W/System.err( 779): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:136) W/System.err( 779): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) W/System.err( 779): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) W/System.err( 779): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) W/System.err( 779): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) W/System.err( 779): at oauth.signpost.commonshttp.CommonsHttpOAuthProvider.sendRequest(CommonsHttpOAuthProvider.java:64) W/System.err( 779): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:177) W/System.err( 779): ... 16 more 

И вот результат при запуске кода Twitter4J:

 W/System.err( 817): api.twitter.comRelevant discussions can be on the Internet at: W/System.err( 817): http://www.google.co.jp/search?q=6c607809 or W/System.err( 817): http://www.google.co.jp/search?q=0f1d8134 W/System.err( 817): TwitterException{exceptionCode=[6c607809-0f1d8134 6c607809-0f1d810a], statusCode=-1, retryAfter=0, rateLimitStatus=null, version=2.2.1} W/System.err( 817): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:204) W/System.err( 817): at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:65) W/System.err( 817): at twitter4j.internal.http.HttpClientWrapper.post(HttpClientWrapper.java:102) W/System.err( 817): at twitter4j.auth.OAuthAuthorization.getOAuthRequestToken(OAuthAuthorization.java:108) W/System.err( 817): at twitter4j.TwitterBaseImpl.getOAuthRequestToken(TwitterBaseImpl.java:271) W/System.err( 817): at com.examples.twitterimages.TwitterImagesActivity.getReqTokenAndAuthenticateUsingTwitter4J(TwitterImagesActivity.java:136) W/System.err( 817): at com.examples.twitterimages.TwitterImagesActivity.onCreate(TwitterImagesActivity.java:64) W/System.err( 817): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) W/System.err( 817): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) W/System.err( 817): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) W/System.err( 817): at android.app.ActivityThread.access$1500(ActivityThread.java:121) W/System.err( 817): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) W/System.err( 817): at android.os.Handler.dispatchMessage(Handler.java:99) W/System.err( 817): at android.os.Looper.loop(Looper.java:123) W/System.err( 817): at android.app.ActivityThread.main(ActivityThread.java:3701) W/System.err( 817): at java.lang.reflect.Method.invokeNative(Native Method) W/System.err( 817): at java.lang.reflect.Method.invoke(Method.java:507) W/System.err( 817): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) W/System.err( 817): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) W/System.err( 817): at dalvik.system.NativeStart.main(Native Method) W/System.err( 817): Caused by: java.net.UnknownHostException: api.twitter.com W/System.err( 817): at java.net.InetAddress.lookupHostByName(InetAddress.java:506) W/System.err( 817): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:294) W/System.err( 817): at java.net.InetAddress.getAllByName(InetAddress.java:256) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:69) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:322) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:285) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:267) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205) W/System.err( 817): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:614) W/System.err( 817): at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:162) W/System.err( 817): ... 19 more 

Кто-нибудь решил это? Я застрял здесь. Я могу получить код для запуска в качестве программы Java SE, но он не работает на Android.

// Джонас

Проверить два шага

1- Дайте URL-адрес обратного вызова в своем твиттере, созданном вами на веб-сайте Twitter (перейдите в свой адрес приложения-> settings-> callback url). Нажмите здесь.

2- Перейдите в раздел «Настройки телефона», затем нажмите «Дата и время» и выберите «Автоматически» (убедитесь, что ваше часовое устройство и время, дата все верны). Если ваше время, дата и часовой пояс неправильны, вы не можете чирикать ,

У меня есть учебник по настройке OAuth для Twitter с Twitter4J на Android здесь , он включает в себя полный исходный код проекта для загрузки, так что это может помочь.

Что касается вашей конкретной проблемы – можете ли вы подключиться к Интернету через эмулятор Android? Похоже, что он не подключается – есть ли у вас какие-либо другие приложения на эмуляторе, которые пытаются подключить Интернет, с которым вы могли бы попробовать и протестировать? Иногда, когда я запускаю эмулятор, если интернет-соединение терпит неудачу, тогда панель сигналов на эмуляторе появляется с помощью X и без нее.

Я использовал SignPost в Android точно для клиента Twitter, отлично работает.

  1. Вы пробовали открыть браузер в Android и перейти на twitter.com?
  2. Попробуйте подключиться к любому URL-адресу из кода?

Да, я решил это (я написал это выше). Я испортил свой манифест и неправильно дал интернет-разрешение. T

Для меня я использовал http: вместо https: для URI запроса