0

関連するコードは次のとおりです。キー、シークレット、およびコールバック変数が定義されています。これらのライブラリ バージョンを使用しています: SocialLibBeta2_2.jar、signpost-core-1.2.1.2.jar、signpost-commonshttp4-1.2.1.2.jar、scribe-0.6.7-SNAPSHOT.jar。

import com.expertiseandroid.lib.sociallib.connectors.SocialNetworkHelper;
import com.expertiseandroid.lib.sociallib.connectors.TwitterConnector;
import com.expertiseandroid.lib.sociallib.exceptions.NotAuthentifiedException;
import com.expertiseandroid.lib.sociallib.model.twitter.TwitterUser;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.scribe.oauth.Token;
import org.xml.sax.SAXException;

import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;

public void SendTweet()
{
TwitterConnector twitter = SocialNetworkHelper.createTwitterConnector(CONS_KEY, CONS_SEC, CALLBACK);

try {
        twitter.requestAuthorization(this);
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthNotAuthorizedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        twitter.authorize(this);
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthNotAuthorizedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Token at = twitter.getAccessToken();
    String token = at.getToken(); 
    String secret = at.getSecret();

    Token myAccessToken = new Token(token, secret);
    twitter.authentify(myAccessToken);

    try {
        twitter.tweet("Test tweet");
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NotAuthentifiedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

エラーは次のとおりです。

04-17 19:05:18.958: E/AndroidRuntime(932): FATAL EXCEPTION: main
04-17 19:05:18.958: E/AndroidRuntime(932): java.lang.NoSuchMethodError: oauth.signpost.commonshttp.CommonsHttpOAuthProvider.retrieveRequestToken
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.expertiseandroid.lib.sociallib.connectors.TwitterConnector.requestAuthorization(TwitterConnector.java:287)
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.sirva.mymc.JournalActivity.SendTweet(JournalActivity.java:247)
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.sirva.mymc.JournalActivity$1$1.onClick(JournalActivity.java:135)
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:873)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.widget.ListView.performItemClick(ListView.java:3513)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.os.Handler.handleCallback(Handler.java:587)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.os.Looper.loop(Looper.java:130)
04-17 19:05:18.958: E/AndroidRuntime(932):  at android.app.ActivityThread.main(ActivityThread.java:3683)
04-17 19:05:18.958: E/AndroidRuntime(932):  at java.lang.reflect.Method.invokeNative(Native Method)
04-17 19:05:18.958: E/AndroidRuntime(932):  at java.lang.reflect.Method.invoke(Method.java:507)
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-17 19:05:18.958: E/AndroidRuntime(932):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-17 19:05:18.958: E/AndroidRuntime(932):  at dalvik.system.NativeStart.main(Native Method)

爆破されている TwitterConnector 関数は次のようになります。

public void requestAuthorization(Context ctx) throws OAuthMessageSignerException, OAuthNotAuthorizedException, OAuthExpectationFailedException, OAuthCommunicationException 
{
  String authUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, callback);
  ctx.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}

protected TwitterConnector(String consumerKey, String consumerSecret, String callback){
  this(consumerKey, consumerSecret, callback, "");
}

protected TwitterConnector(String consumerKey, String consumerSecret, String callback, String twitPicKey){
  this.authentified = false;
  this.reader = new TwitterReader();
  this.twitPicKey = twitPicKey;
  this.callback = callback;
  httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
  httpOauthprovider = new CommonsHttpOAuthProvider(TWITTER_REQUEST, TWITTER_ACCESS, AUTHORIZE);

}

これは、他のライブラリに問題がないことを確認するための簡単なテストアプリです

package com.test;

import android.app.Activity;
import android.os.Bundle;
import com.expertiseandroid.lib.sociallib.connectors.SocialNetworkHelper;
import com.expertiseandroid.lib.sociallib.connectors.TwitterConnector;
import com.expertiseandroid.lib.sociallib.exceptions.NotAuthentifiedException;
import com.expertiseandroid.lib.sociallib.model.twitter.TwitterUser;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;

import org.scribe.oauth.Token;
import org.xml.sax.SAXException;

import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;

public class TestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String CONS_KEY = "xxxxxxxxxxxxxxxxxxx";
    String CONS_SEC = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
    String CALLBACK = "http://xxxx.com";

    TwitterConnector twitter = SocialNetworkHelper.createTwitterConnector(CONS_KEY, CONS_SEC, CALLBACK);

    try {
        twitter.requestAuthorization(TestActivity.this);
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthNotAuthorizedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        twitter.authorize(this);
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthNotAuthorizedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Token at = twitter.getAccessToken();
    String token = at.getToken(); 
    String secret = at.getSecret();

    Token myAccessToken = new Token(token, secret);
    twitter.authentify(myAccessToken);

    try {
        twitter.tweet("Test tweet");
    } catch (OAuthMessageSignerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthExpectationFailedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (OAuthCommunicationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (NotAuthentifiedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }   
}

}

これを実行すると同じエラーが発生します。TestActivity.this は有効なコンテキストです。メソッド requestAuthorization にアクセスできますが、NoSuchMethodError と再度表示されます。テスト プロジェクトに含まれるライブラリ: commons-codec-1.6.jar、scribe-0.6.6.jar (0.6.7 も試した)、signpost-commonshttp4-1.2.1.2.jar、signpost-core-1.2.1.2.jar、 signpost-jetty6-1.2.1.2.jar、SocialLibBeta2_2.jar。

ここにもマニフェストがあります:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="10" />

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".TestActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>
4

2 に答える 2

0

代わりに Scribe を使用することにしました。SocialLib にはあまりにも多くの問題がありました。

于 2012-04-20T12:37:12.563 に答える
0

プロジェクトに含める必要があるライブラリを見逃していると思います。そのため、このエラーが発生しています。ここから3つのライブラリをダウンロードし、このライブラリもダウンロードする必要があります。そうしないと、別の例外が再び発生します

于 2012-04-17T20:37:02.560 に答える