Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その4
Cocos2d-xとTwitter Kitを使ってOAuth認証&ユーザタイムライン取得-Android編その3の続き
ではいよいよ最終目標のユーザタイムラインの取得をします。
今回もまたAppActivityでメソッドを作ってNativeLauncherにjniを追加します。
前回とだいたい同じですが、今回は配列を返します。
パラメータやデータ構造はGET statuses/user_timelineを見てください。
countのところが取得するツイート数です。
リツイートを含めない設定にしていても、1ツイートとしてカウントされるので注意してください。
NativeLauncher.cpp
戻り値の指定が"()[Ljava/lang/String;"と"["が入っているのに注意してください。
一旦jobjectArrayに格納した配列をstd::vector<std::string> userTimeline_textにループで入れています。
jinについて詳しくはここをcocos2d-xでjniを使ってみる
ではいよいよ最終目標のユーザタイムラインの取得をします。
今回もまたAppActivityでメソッドを作ってNativeLauncherにjniを追加します。
AppActivity.java
static String userTimeline_text[];
public static String[] showUserTimeline() throws InterruptedException{
final CountDownLatch cdl = new CountDownLatch(1);
final int count = 5;
StatusesService statusesService = Twitter.getApiClient().getStatusesService();
statusesService.userTimeline(null,null,count, null, null, true, false, true, true,
new Callback<List<Tweet>>() {
@Override
public void success(Result<List<Tweet>> listResult) {
String text[] = new String[count];
int tweetNum = 0;
for (Tweet tweet : listResult.data) {
text[tweetNum] = tweet.text;
tweetNum++;
}
userTimeline_text = text;
cdl.countDown();
}
@Override
public void failure(TwitterException e) {
System.out.println("failure");
}
});
cdl.await();
return userTimeline_text;
}
前回とだいたい同じですが、今回は配列を返します。
パラメータやデータ構造はGET statuses/user_timelineを見てください。
countのところが取得するツイート数です。
リツイートを含めない設定にしていても、1ツイートとしてカウントされるので注意してください。
NativeLauncher
NativeLauncher.h#include <string.h>
#include "cocos2d.h"
using namespace std;
using namespace cocos2d;
class NativeLauncher{
public:
static void loginTwitter();
static std::string showTweet();
static std::vector<std::string> showUserTimeline();
};
NativeLauncher.cpp
std::vector<std::string> NativeLauncher::showUserTimeline(){
std::vector<std::string> userTimeline_text;
JniMethodInfo JMI;
if (JniHelper::getStaticMethodInfo(JMI, CLASS_NAME, "showUserTimeline", "()[Ljava/lang/String;")) {
jobjectArray joa = (jobjectArray)JMI.env->CallStaticObjectMethod(JMI.classID, JMI.methodID);
jsize len = JMI.env->GetArrayLength(joa);
for (int i=0; i < len; i++){
jstring jStr = (jstring)JMI.env->GetObjectArrayElement(joa, i);
const char *str = JMI.env->GetStringUTFChars(jStr,NULL);
userTimeline_text.push_back(str);
JMI.env->ReleaseStringUTFChars(jStr, str);
}
JMI.env->DeleteLocalRef(JMI.classID);
}
return userTimeline_text;
}
戻り値の指定が"()[Ljava/lang/String;"と"["が入っているのに注意してください。
一旦jobjectArrayに格納した配列をstd::vector<std::string> userTimeline_textにループで入れています。
jinについて詳しくはここをcocos2d-xでjniを使ってみる
NativeLauncher::showUserTimeline();とcocosから呼び出せばユーザタイムラインが取得できるはずです。
コメント