twitter4jでandroidアプリを製作している、アプリ開発初心者です。
streamingAPIを利用してタイムラインの自動更新を目指しているのですが、うまくいきません...
OAuth認証とタイムラインの表示まではできました。
コードを貼り付けるので、どこが悪いかや、足りない部分など、わかる範囲で教えていただけると幸いです。
よろしくお願いいたします!
public class MainActivity extends ListActivity {
private TweetAdapter mAdapter;
private Twitter mTwitter;
private MyUserStreamAdapter mMyUserStreamAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!TwitterUtils.hasAccessToken(this)) { Intent intent = new Intent(this, TwitterOAuthActivity.class); startActivity(intent); finish(); } else { mAdapter = new TweetAdapter(this); setListAdapter(mAdapter); mTwitter = TwitterUtils.getTwitterInstance(this); reloadTimeLine(); } mMyUserStreamAdapter = new MyUserStreamAdapter(); String oAuthConsumerKey = " XXXXXXXXXXXXXXXXXXXXXXXXX"; String oAuthConsumerSecret = "XXXXXXXXXXXXXXXXXXXXXX"; String oAuthAccessToken = "XXXXXXXXXXXXXXXXXXXXXX"; String oAuthAccessTokenSecret = "XXXXXXXXXXXXXXXXXXXXXXX"; ConfigurationBuilder builder = new ConfigurationBuilder(); { builder.setOAuthConsumerKey(oAuthConsumerKey); builder.setOAuthConsumerSecret(oAuthConsumerSecret); builder.setOAuthAccessToken(oAuthAccessToken); builder.setOAuthAccessTokenSecret(oAuthAccessTokenSecret); } twitter4j.conf.Configuration conf = builder.build(); TwitterStreamFactory twitterStreamFactory = new TwitterStreamFactory(conf); TwitterStream twitterStream = twitterStreamFactory.getInstance(); // ユーザーストリーム操作 { twitterStream.addListener(mMyUserStreamAdapter); twitterStream.user(); }
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
private class TweetAdapter extends ArrayAdapter<twitter4j.Status> {
private LayoutInflater mInflater; public TweetAdapter(Context context) { super(context, android.R.layout.simple_list_item_1); mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_tweet, null); } Status item = getItem(position); TextView name = (TextView) convertView.findViewById(R.id.name); name.setText(item.getUser().getName()); TextView screenName = (TextView) convertView.findViewById(R.id.screen_name); screenName.setText("@" + item.getUser().getScreenName()); TextView text = (TextView) convertView.findViewById(R.id.text); text.setText(item.getText()); return convertView; }
}
private void reloadTimeLine() {
AsyncTask<Void, Void, List<twitter4j.Status>> task = new AsyncTask<Void, Void, List<twitter4j.Status>>() {
@Override
protected List<twitter4j.Status> doInBackground(Void... params) {
try {
return mTwitter.getHomeTimeline();
} catch (TwitterException e) {
e.printStackTrace();
}
return null;
}
@Override protected void onPostExecute(List<twitter4j.Status> result) { if (result != null) { mAdapter.clear(); for (twitter4j.Status status : result) { mAdapter.add(status); } getListView().setSelection(0); } else { showToast("タイムラインの取得に失敗しました。。。"); } } }; task.execute();
}
private void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
class MyUserStreamAdapter extends UserStreamAdapter {
@Override public void onStatus(final Status status) { super.onStatus(status); runOnUiThread(new Runnable() { @Override public void run() { mAdapter.insert(status, 0); mAdapter.notifyDataSetChanged(); } }); }
}
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。