Android的简单JTwitter示例

3

我已经尝试了许多不同的方法,并在互联网上搜索了教程,以了解如何使用OAuth的JTwitter。以下是我已经完成的步骤:

下载JTwitter和Signpost

将它们添加为Java Builder中的Jars

创建一个简单的按钮来运行它

public class ShareGenerator extends Activity {

    private static final String JTWITTER_OAUTH_KEY = "this_is_populated";
    private static final String JTWITTER_OAUTH_SECRET = "this_is_populated";

    Button menupopButton;

     @Override
        public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
  setContentView(R.layout.share);
  this.setContentView(R.layout.share);
  this.txShare = (TextView)this.findViewById(R.id.lblshare);
  this.menupopButton = (Button)this.findViewById(R.id.menupop);


  menupopButton.setOnClickListener(new View.OnClickListener()
  { 
      public void onClick(View v) 

      {
          TwitterSend();

      } 
 }); 

     }

我有我的类

public void TwitterSend () {

                 OAuthSignpostClient client = new OAuthSignpostClient(JTWITTER_OAUTH_KEY, JTWITTER_OAUTH_SECRET, "oob");
                    Twitter jtwit = new Twitter("bob", client);
                    // open the authorisation page in the user's browser
                    client.authorizeDesktop();
                    // get the pin
                    String v = client.askUser("Please enter the verification PIN from Twitter");
                    client.setAuthorizationCode(v);
                    // Optional: store the authorisation token details
                    Object accessToken = client.getAccessToken();
                    // use the API!
                    jtwit.setStatus("Messing about in Java");

             }

然而,我无法让OAuth屏幕弹出。 当它到达那里时就会崩溃。 有人能帮助我至少看到OAuth屏幕吗? 我已经正确设置了导入。


查看Logcat对崩溃的描述,并确保您在清单文件中拥有INTERNET权限。 - Pentium10
Logcat显示java.lang.NoClassDefFoundErrors: java.awt.Desktop,客户端在client.authorizeDesktop()处失败。 - JuniorFlip
我无法将URI转换为Uri以便在setData()方法中传递URL。有什么建议吗? - user600107
3个回答

3
这个问题出现在使用java.awt.Desktop的这一行代码中:
// open the authorisation page in the user's browser
client.authorizeDesktop();

这个方法可以在桌面电脑上使用,但是不能在Android上使用。

相反,您可以从client.authorizeUrl();获取URL并将用户重定向到那里。例如,可以使用以下代码:

URI url = client.authorizeUrl();
Intent myIntent = new Intent(Intent.VIEW_ACTION);
myIntent.setData(url);
startActivity(myIntent);

但我不是Android开发者!使用回调函数而不是oob可能会更好。希望其他人可以提供该代码...


1

Daniel 提供了一个相当不错的起点。这是我在我的 Android 应用中实现它的方式:

    OAuthSignpostClient authClient = new OAuthSignpostClient('apiKey','apiSecret','callbackUrl');

                java.net.URI jUrl = authClient.authorizeUrl();
                Uri.Builder uriBuilder = new Uri.Builder();
                uriBuilder.encodedPath(jUrl.toString());

                Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(jUrl.toString()));
                startActivity(myIntent);

当然,为了简洁起见,我使用了'apiKey'等内容。您需要在OAuthSignpostClient构造函数中使用自己的密钥、秘密和回调URL。

注意:您需要将JTwitter提供的Java.net.URI转换为Android.net.Uri,以便将其用于启动新的意图。

之后,您需要使用intent-filter来捕获回调URL,并对从Twitter API获取的用户令牌和秘密进行处理。


我有点困惑为什么你有两行使用uriBuilder,但你并没有使用它们。encodedPath是否有隐藏的后果或者我漏掉了什么? - Mikle

-2

看看这篇文章[如果你在意,检查修订历史记录]


5
你将会寻找每个相关的问题并提供相同的答案,是吗? - user1228

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接