如何使用REST API 1.1从Android应用程序发推文

时间:2014-01-29 11:16:47

标签: android twitter

这里我将一些Android应用程序的文本发布到用户的Twitter帐户,我有ConsumerKey,Consumer secret密钥,AccessToken和AccessToken密钥。

https://api.twitter.com/1.1/statuses/update.json

通过使用简单的HTTP客户端请求,我想在Twitter用户帐户上发布数据。我怎么能这样做?

我试过像

这样的东西
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://api.twitter.com/1/statuses/update.json");

// HttpPost httppost = new HttpPost("https://graph.facebook.com/" + profile_ID + "/feed");

System.out.println("httppost " + httppost);

try {
    // Add your data
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
    nameValuePairs.add(new BasicNameValuePair("access_token", access_token_value));
    nameValuePairs.add(new BasicNameValuePair("message", compose.getText().toString()));
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

    // Execute HTTP Post Request
    HttpResponse response = httpclient.execute(httppost);

    System.out.println("response "+response.toString());

}
catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
}
catch (IOException e) {
    // TODO Auto-generated catch block
}

但是我的代码following this中的参数是错误的,但我没有得到它,那么对于这个有什么合适的解决方案呢?

2 个答案:

答案 0 :(得分:0)

由于您要求如何使用REST API 1.1从Android应用程序发送推文,我建议您使用Twitter 4j库,以便在您的Android应用程序中集成Twitter。 / p>

此库封装了身份验证功能(通过OAuth库)和其他重要功能。以下是它的一些功能:

Twitter4J的特色是:

  • 100%纯Java - 适用于任何Java平台版本5或更高版本
  • Android平台和Google App Engine - 准备就绪
  • 零依赖:不需要额外的JAR个文件
  • 内置OAuth支持
  • 开箱即用的gzip支持
  • 100%Twitter API 1.1兼容

您需要通过此库调用简单函数才能使用有关Twitter的特定功能。这是一个演示此库使用情况的链接: http://twitter4j.org/en/code-examples.html

您可以在http://twitter4j.org/链接下载此库。

以下是使用库https://github.com/itog/Twitter4j-android-Sample实现的示例。

答案 1 :(得分:0)

如果您想在文本框中发布您输入的内容,我可以在此帮助您。 1.您必须将twitter4j库包含在gradle文件中,如下所示:

    compile group: 'org.twitter4j', name: 'twitter4j-core', version: '4.0.1'

2。在您的代码中包含以下代码段:

public String sTweet;
EditText et_TweetText;
public static String consumerkey = "xxxxxxxxxxxxxxxxx";
public static String consumersecret = "xxxxxxxxxxxxxxxxx";
public static String accesstoken="xxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxx";
public static String accesstokensecret="xxxxxxxxxxxxxxxxx";

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    et_TweetText = (EditText) view.findViewById(R.id.et_TweetText);

    bt_tweetIt = (Button) view.findViewById(R.id.bt_tweetIt);
    bt_tweetIt.setOnClickListener(this);
}

@Override
public void onClick(View v) {
sTweet = et_TweetText.getText().toString();
Log.i(TAGTweet, "onClick- sTweet: " + sTweet);

if(CheckConnectivity()!=0){
    Log.i(TAGTweet, "Internet Connection ON: ");
    new UseTweeter().execute();
}
else {
    Log.i(TAGTweet, "Internet Connection OFF: ");
    ShowNoInternetConnectionAlert();
}

}

 public class UseTweeter extends AsyncTask<String,String,String>{
     @Override
protected String doInBackground(String... params) {
     TweetThisMessage();
    return null;
}

}

public void TweetThisMessage(){
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthAccessToken(accesstoken);
builder.setOAuthAccessTokenSecret(accesstokensecret);
builder.setOAuthConsumerKey(consumerkey);
builder.setOAuthConsumerSecret(consumersecret);
OAuthAuthorization auth = new OAuthAuthorization(builder.build());
Twitter twitter = new TwitterFactory().getInstance(auth);

try {
    Log.i(TAGTweet, "sTweet in TweetThisMessage(): " + sTweet);
    twitter.updateStatus(sTweet);
} catch (TwitterException e) {
    e.printStackTrace();
    return;
}

}

希望它有所帮助。