在我的 Android应用程序中,我试图从他的Facebook帐户获取用户的封面照片.

我可以使用下面的代码获取个人资料图片.

profilePicUrl = new URL("http://graph.facebook.com/" + userId + "/picture?type=large");

profilePicBmp = BitmapFactory.decodeStream(profilePicUrl.openConnection().getInputStream());

documentation指定了以下用于检索封面照片.

The user’s cover photo (must be explicitly requested using
fields=cover parameter)

Requires access_token

Returns : array of fields id,source,and
offset_y

因此,JSON响应的结构将是这样的.

{
   "cover": {
      "cover_id": "10151008748223553","source": "http://sphotos-a.ak.fbcdn.net/hphotos-ak-ash4/s720x720/391237_10151008748223553_422785532_n.jpg","offset_y": 0
   },"id": "19292868552"
}

我对Facebook Graph API很新,因此对如何解决这个问题知之甚少.

我试过这个coverPicUrl =新的URL(“http://graph.facebook.com/”userId“/ cover?type = large”);

还有这个coverPicUrl =新的URL(“http://graph.facebook.com/”userId“/ fields = cover”);

但我无法获得用户个人资料的封面图片.

在线搜索也没有产生任何丰硕的成果.

任何帮助确实会受到赞赏.

谢谢!

解决方法

“source”标记(JSONObject)嵌套在另一个JSONObject(“cover”标记)中.要解析此结果,您必须使用以下内容:
JSONObject JOSource = JOCover.optJSONObject("cover");
String coverPhoto = JOSource.getString("source");

示例中使用的JOCover假定您已经有一个JSONOBject(JOCover)来解析根.您可以在自己的位置替换自己的JSONObject.

无法直接访问“source”标记,因为它嵌套在“cover”标记中.你将不得不使用“.optJSONObject(”cover“)”.我见过人们使用.getString而不是.optJSONObject,但我从未使用它.选择适合你的方式.

编辑

根据您对使用Graph API的解决方案的要求,我正在编辑早期的解决方案并将其替换为Graph API解决方案.

最好在AsyncTask中,在doInBackground中使用此代码:

String URL = "https://graph.facebook.com/" + THE_USER_ID + "?fields=cover&access_token=" + Utility.mFacebook.getAccesstoken();

String finalCoverPhoto;

try {

    HttpClient hc = new DefaultHttpClient();
    HttpGet get = new HttpGet(URL);
    HttpResponse rp = hc.execute(get);

    if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
        String result = EntityUtils.toString(rp.getEntity());

        JSONObject JODetails = new JSONObject(result);

        if (JODetails.has("cover")) {
            String getinitialCover = JODetails.getString("cover");

            if (getinitialCover.equals("null")) {
                finalCoverPhoto = null;
        } else {
            JSONObject JOCover = JODetails.optJSONObject("cover");

            if (JOCover.has("source"))  {
                finalCoverPhoto = JOCover.getString("source");
            } else {
                finalCoverPhoto = null;
            }
        }
    } else {
        finalCoverPhoto = null;
    }
} catch (Exception e) {
    // Todo: handle exception
}

我已经测试了这个解决方案并且运行得很您必须向活动所需的基本URL添加任何添加字段.为了测试,我只使用fields = cover

在onPostExecute中,做你的事情来显示封面图片.希望这可以帮助.

android – 使用Facebook API获取封面照片的更多相关文章

  1. Swift*Cannot invoke 'jsonObject' with an argument list of type

    想从本地一个json文件取数据,单数照着使用这个方法一直报错误:Cannotinvoke‘jsonObject’withanargumentlistoftype‘(with:NSData,options:JSONSerialization.ReadingOptions)’这里竟然是因为一个参数的类型出了问题,纠结老半天,因为这里需要的参数类型是Data而不是NSData,习惯性的以为是一样的,习惯

  2. Swift 2到3迁移jsonObject生成’Any’而不是预期的上下文结果类型’AnyObject?’

    ’我尝试在完整上下文中转换为swift3之前的代码如下.在Swift3中,id类型现在作为Any而不是AnyObject导入.您可以将obj的类型更改为Any或将其转换为AnyObject.

  3. swift2 – 使用Swift 2.0的Alamofire Manager取消了

    我有一个使用Alamofire2.0和以下init的Swift2.0apimanager类:功能示例:我收到的错误:似乎请求被取消,因为管理器正在被取消分配.添加print语句可以防止管理器被释放,然后它就可以完美地运行了.但我正在努力寻找更好的解决方案.任何帮助,将不胜感激!我正在遇到同样的问题,我用它来解决它然后我打电话给它

  4. android – “不幸的是,相机停止了”相机意图

    所以我试图让用户拍一张照片然后发送到服务器.我在android中有点像菜鸟,所以我按照this教程了解如何操作.我见过几个类似于我的问题,但不完全一样.该应用程序确实启动相机应用程序,并允许我拍照,这是当我点击“检查”接受图像,以便说我收到消息“不幸的是,相机已经停止”,应用程序返回到活动的地方我没有明显地获得缩略图和图像.从相机启动到停止工作的那一刻起,Logcat都不会显示任何内容.这是我的代

  5. android – 使用Facebook API获取封面照片

    在我的Android应用程序中,我试图从他的Facebook帐户获取用户的封面照片.我可以使用下面的代码获取个人资料图片.documentation指定了以下用于检索封面照片.Theuser’scoverphoto(mustbeexplicitlyrequestedusingfields=coverparameter)Requiresaccess_tokenReturns:arrayoffield

  6. android – org.json.JSONException:值<!DOCTYPE类型java.lang.String无法转换为JSONObject

    在这里,我想使用API密钥显示JSON内容.但我无法获得身份验证.我在JsonObject中收到错误:在我的Android应用程序中,我只是传递API密钥和URLid以获取以下URL中的JSON响应.我使用JSON数组显示JSON内容.但如果我:解决方法更新:基于HTML响应,我可以告诉你这不是JSON.该响应告诉我您的Web服务的URL不正确.您需要检查您的网址.额外信息/上一个答案:看起来简单

  7. android – UnitTest JSONObject显示为null

    )将其添加到build.gradle文件中,如下所示这将取代存根的Android库与在桌面上工作的库.

  8. 从android sdk 4.0.1获取朋友列表在android中使用graph api 2.2

    在进行一些搜索之后用于获取列表的代码如下所示我得到的许可是accesstoken:{Accesstoken令牌:ACCESS_TOKEN_REMOVED权限:[user_friends,basic_info]}getRecentlyGrantedPermissions:[user_friends,basic_info]getRecentlyDeniedPermissions:[]并且图形函数的输出

  9. android – Retrofit 2检查调用URL

    有没有可能比较调用URL和Retrofit2中的字符串?

  10. android – 用于json对象的Volley Post方法

    如何从volleyplz帮助发布此请求js是我的jsson对象……我让我的jsson像这样……但它没有回应plzz帮助的价值解决方法首先你的json数据:然后你的json请求:注意标题如果你想在localhost中测试使用下面的代码并设置你的url连接你的localhost服务器和IP地址:下面的代码将您的所有请求放在一个文本文件中,我尝试了它,它的工作原理

随机推荐

  1. bluetooth-lowenergy – Altbeacon库无法在Android 5.0上运行

    昨天我在Nexus4上获得了Android5.0的更新,并且altbeacon库停止了检测信标.似乎在监视和测距时,didEnterRegion和didRangeBeaconsInRegion都没有被调用.即使RadiusNetworks的Locate应用程序现在表现不同,一旦检测到信标的值,它们就不再得到更新,并且通常看起来好像信标超出了范围.我注意到的一点是,现在在logcat中出现以下行“B

  2. android – react-native动态更改响应者

    我正在使用react-native进行Android开发.我有一个视图,如果用户长按,我想显示一个可以拖动的动画视图.我可以使用PanResponder实现这一点,它工作正常.但我想要做的是当用户长按时,用户应该能够继续相同的触摸/按下并拖动新显示的Animated.View.如果您熟悉Google云端硬盘应用,则它具有类似的功能.当用户长按列表中的任何项目时,它会显示可拖动的项目.用户可以直接拖

  3. android – 是否有可能通过使用与最初使用的证书不同的证书对其进行签名来发布更新的应用程序

    是否可以通过使用与最初使用的证书不同的证书进行签名来发布Android应用程序的更新?我知道当我们尝试将这样的构建上传到市场时,它通常会给出错误消息.但有没有任何出路,比如将其标记为主要版本,指定市场中的某个地方?解决方法不,你不能这样做.证书是一种工具,可确保您是首次上传应用程序的人.所以总是备份密钥库!

  4. 如何检测Android中是否存在麦克风?

    ..所以我想在让用户访问语音输入功能之前检测麦克风是否存在.如何检测设备上是否有麦克风.谢谢.解决方法AndroidAPI参考:hasSystemFeature

  5. Android – 调用GONE然后VISIBLE使视图显示在错误的位置

    我有两个视图,A和B,视图A在视图B上方.当我以编程方式将视图A设置为GONE时,它将消失,并且它正下方的视图将转到视图A的位置.但是,当我再次将相同的视图设置为VISIBLE时,它会在视图B上显示.我不希望这样.我希望视图B回到原来的位置,这是我认为会发生的事情.我怎样才能做到这一点?编辑–代码}这里是XML:解决方法您可以尝试将两个视图放在RelativeLayout中并相对于彼此设置它们的位置.

  6. android – 获得一首歌的流派

    我如何阅读与歌曲相关的流派?我可以读这首歌,但是如何抓住这首歌的流派,它存放在哪里?解决方法检查此代码:

  7. android – 使用textShadow折叠工具栏

    我有一个折叠工具栏的问题,在展开状态我想在文本下面有一个模糊的阴影,我使用这段代码:用:我可以更改textColor,它可以工作,但阴影不起作用.我为阴影尝试了很多不同的值.是否可以为折叠文本投射阴影?

  8. android – 重用arm共享库

    我已经建立了armarm共享库.我有兴趣重用一个函数.我想调用该函数并获得返回值.有可能做这样的事吗?我没有任何头文件.我试过这个Android.mk,我把libtest.so放在/jni和/libs/armeabi,/lib/armeabi中.此时我的cpp文件编译,但现在是什么?我从objdump知道它的名字编辑:我试图用这个android.mk从hello-jni示例中添加prebuild库:它工作,但libtest.so相同的代码显示以下错误(启动时)libtest.so存在于libhello-j

  9. android – 为NumberPicker捕获键盘’Done’

    我有一个AlertDialog只有一些文本,一个NumberPicker,一个OK和一个取消.(我知道,这个对话框还没有做它应该保留暂停和恢复状态的事情.)我想在软键盘或其他IME上执行“完成”操作来关闭对话框,就像按下了“OK”一样,因为只有一个小部件可以编辑.看起来处理IME“Done”的最佳方法通常是在TextView上使用setonEditorActionListener.但我没有任何Te

  10. android – 想要在调用WebChromeClient#onCreateWindow时知道目标URL

    当我点击一个带有target=“_blank”属性的超链接时,会调用WebChromeClient#onCreateWindow,但我找不到新的窗口将打开的新方法?主页url是我唯一能知道的东西?我想根据目标网址更改应用行为.任何帮助表示赞赏,谢谢!

返回
顶部