【问题标题】:Current Month Facebook Friends Birthdays in AndroidAndroid 中的当月 Facebook 好友生日
【发布时间】:2013-01-17 07:09:05
【问题描述】:

我正在编写一个应用程序,其中我正在使用 Hackbook 示例代码 获取 Facebook 好友列表,但现在我想获取那些生日的 Facebook 好友列表在当前月份,获取我正在使用此代码的所有朋友的列表:

 public static void requestFriends(FacebookRequest facebookRequest) {
    Log.d(LOG_TAG, "requestFriends(" + ")");
    String query = "select name, birthday, uid, pic_square from user where uid in (select uid2 from friend where uid1=me()) order by birthday_date";
    Bundle params = new Bundle();
    params.putString("method", "fql.query");
    params.putString("query", query);
    FacebookUtility.asyncRunner.request(null, params, new FacebookRequestListener(FacebookRequestListener.FRIENDS, facebookRequest));
}

我仍然使用下面的代码来获取当月生日的朋友列表

 Calendar c = Calendar.getInstance(); 
    int month = c.get(Calendar.MONTH)+ 1;

    String query = "select name, birthday, uid, pic_square from user where uid in " +
    "(select uid2 from friend where uid1=me())AND birthday_date >= '" + month + "/01' AND birthday_date <= '" + month + "/31' ORDER BY birthday_date ASC";

但我没有得到任何记录,我错过了什么?

【问题讨论】:

  • 您希望即将到来的生日只到月底还是当月的所有生日?
  • @SomnathMuluk 感谢您的回复,我需要显示当月即将到来的所有生日(查询将自动显示下个月所有即将到来的生日,依此类推......)

标签: android facebook facebook-graph-api facebook-fql facebook-android-sdk


【解决方案1】:

您可以做的是使用您正在使用的语言计算以下值并在您的 FQL 中使用它们:

1st's day of the current month (17),
Today's month of the year (01)
End date day of the current month (31)

确保日期和月份分别使用 dd 和 MM 进行格式化(如果是个位数,则用零填充)。那么您的 FQL 将如下所示:

SELECT name, birthday_date
  FROM user 
  WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND strlen(birthday_date) != 0
  AND (
       substr(birthday_date, 0, 2) = '01'
       AND substr(birthday_date, 3, 5) >= '01'
       AND substr(birthday_date, 3, 5) < '31'
  ) 
  ORDER BY birthday_date

这将返回生日在 1 月 1 日到 1 月 31 日之间的朋友。

更新: 计算当月和当月最后一天:

Calendar cal=Calendar.getInstance();
int currentmonth=cal.get(Calendar.MONTH)+1

public static Date getLastDateOfMonth(int year, int month) {
   Calendar calendar = new GregorianCalendar(year, month, Calendar.DAY_OF_MONTH);
   calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
   return calendar.getTime();
}

【讨论】:

  • 是的,我同意你只获得一月的生日,我可以使用这个查询 String modifiedQuery = "SELECT uid, name, pic_square,birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 =me()) ANDbirthday_date >= '01/01' ANDbirthday_date
  • @Liza:你说的更有活力是什么意思?我并不是说要放置“01”和“31”静态值。通过编程语言(android)计算开始和结束日期,月份并将这些变量放在那里。还有什么?
  • 你写的我已经知道了,你说的是Android语言,请用你使用的任何语言写给我看代码,然后我会在我的Android程序中使用它...
  • @Liza: 意思是你想通过编程语言(动态)知道当前月份和最后一个月的日期?
  • 您在对另一个问题的评论中让我看一下这个问题,但我认为我不能为 Somnath Muluk 的回答和 cmets 添加太多内容。只需使用他的查询示例并使用时间输入作为变量动态构建查询字符串。如果您不确定如何在 Java 中动态构建字符串,您需要先阅读它。有很多可用的网络教程。
【解决方案2】:

使用此查询以升序获取当前月份的 facebook 好友..

SELECT name, birthday, uid, pic_square FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1=me())AND birthday_date &gt;= '01/01/2013' AND birthday_date &lt;= '31/01/2013' ORDER BY birthday_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多