Problem mit OAuth, Twitter und Android: fehl http-Kommunikation mit dem server

Hat jemand ein funktionierendes Beispiel für die OAuth-Authentifizierung bei twitter mit Android? Ich habe versucht, beide zu verwenden Twitter4J und Wegweiser, aber ich bekomme sehr merkwürdige Fehler, nämlich twitter.com ist ein unbekannter host. Ich habe understod, dass es ein problem gibt (unter Google Android) mit dem Wegweiser-Bibliothek und Android und nach dem Projekt home-page, die CommonsHttpOAuth* Klassen arbeiten soll.

Hier ist mein Wegweiser:

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();
    }

}

und hier ist mein code für 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();
    }
}

und ja, ich habe eine manifest-Datei mit der Internet-Berechtigung und einen intent-filter für die callback-url. Hier ist die Ausgabe von logcat beim ausführen des Wegweiser-code:

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

und hier ist die Ausgabe beim ausführen der Twitter4J-code:

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

Haben jemand dieses Problem gelöst? Ich bin hier hängengeblieben. Ich kann den code zum ausführen einer Java-SE-Programm, aber es funktioniert nicht auf android...

//Jonas

  • Haben Sie dieses problem gelöst??
InformationsquelleAutor user331244 | 2011-06-12
Schreibe einen Kommentar