【问题标题】:location values are null with facebook API in android位置值在 android 中使用 facebook API 为空
【发布时间】:2013-02-27 08:34:24
【问题描述】:

我正在尝试制作一个简单的应用程序,我唯一想要检索的是我当前位置的坐标,使用 facebook 用户的数据。 我正在按照本指南开始使用: https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/

唯一的区别是我替换的地方

user.getName();

user.getLocation().getLatitude(); //it's always null and so throws exception.

然后我尝试了其他方法,例如 getCountry() 或 getState();该值始终为空。

有人知道如何解决这个问题并使用这些方法获取位置值吗?谢谢。

这是我的部分代码:

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // start Facebook Login
    Session.openActiveSession(this, true, new Session.StatusCallback() {

     // callback when session changes state

     @Override
     public void call(Session session, SessionState state, Exception exception) {
     if (session.isOpened()) {
      // make request to the /me API
      Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

       // callback after Graph API response with user object

       @Override
       public void onCompleted(GraphUser user, Response response) {
        if (user != null) {
         TextView txt = (TextView) findViewById(R.id.text);
         txt.setText("Latitude is: " + user.getLocation().getLatitude());
        }
       }
      });

     }
   }
 });
}

编辑:在 facebook sdk 附带的 hackbook 项目示例中,我看到可以通过位置 ID 获取坐标(纬度和经度),有人知道怎么做吗?

【问题讨论】:

    标签: java android facebook api location


    【解决方案1】:

    好的,我想我终于有了答案:为了从 ID 获取坐标,我使用了这个查询:

    http://graph.facebook.com/ID
    

    然后只需解析结果以获取坐标(如果有更简单的方法,请纠正我) 可以通过以下方式轻松获取 ID:

    user.getLocation();
    

    顺便说一句,在我第一次尝试时,我仍然不知道为什么返回的值是 null,也许我的解决方法的结果没有我想象的那么准确,但我意识到 facebook 并没有注册一个如此准确的位置有人在他的墙上张贴了一些东西,但只是该帖子来自的城市的坐标。 (再次,如果我错了,请纠正我)。

    谢谢。

    【讨论】:

    • 嗯,我认为准确性是隐私问题。我可以让我的朋友知道我在 XY 市时发布了这篇文章——但我想让他们知道我现在站在前面的性用品商店的确切地址?也许宁可不……
    • 我正在尝试这个,但它只给城市,国家不能给国家
    【解决方案2】:

    您必须使用 getProperty 方法 - 检索城市和国家/地区的示例是 -

    user.getLocation().getProperty("name");
    

    检查link,它说 - GraphUser 提供由 Graph API 定义的用户的强类型表示。请注意,此接口旨在与 GraphObject.Factory 一起使用,而不是直接实现

    这个link 有一些例子,这会让事情更清楚。

    我从这里引用这个 - 此响应中的一些数据可以作为 GraphUser 接口属性的强类型属性访问 - 例如:name生日可以使用 getProperty() 方法并选择所需的键来访问其他属性 - 例如:localelanguages 。此步骤向您展示如何访问用户的姓名、生日、语言、位置和语言环境。

    【讨论】:

      【解决方案3】:

      getLocation() 方法只返回用户当前所在的城市。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 2012-11-08
        • 2012-01-15
        • 1970-01-01
        • 1970-01-01
        • 2017-07-04
        相关资源
        最近更新 更多