我正在为"me/home"进行Facebook Graph API调用以获取用户的新闻源.众所周知,你在"图片"字段中获得的URL是一张低分辨率的照片,在100x100以上的任何地方看起来不太好.我知道你可以通过对"object_id"进行另一个图形调用并在该结果中使用"source"字段来获取高分辨率图片的URL.
但我正在查看URL,并认为可能有一种方法可以将一个转换为另一个而无需进行另一个图形调用.要么是这样,要么从其他领域的现有数据构建高分辨率.例如,第一个URL是低分辨率的URL,第二个URL是源分辨率.
http://photos-d.ak.fbcdn.net/hphotos-ak-ash4/297313_10152643117455790_610095553_s.jpg
http://sphotos-b.xx.fbcdn.net/hphotos-ash4/297313_10152643117455790_610095553_n.jpg
Run Code Online (Sandbox Code Playgroud)
它看起来像数字 (something I don't know)_("object_id")_(something else I don't know)
有没有人有尝试更改URL同时保持数字部分在中间的经验?是否存在可能导致正则表达式问题的变体?
编辑:这是我正在使用的代码.
String objectId = null;
if (jsonObject.has("object_id")) {
objectId = jsonObject.getString("object_id");
}
String postPhoto = "http://graph.facebook.com/" + objectId + "/picture";
Run Code Online (Sandbox Code Playgroud)
检查帖子是否是照片在代码中稍早一些,所以它总是会为帖子类型的"照片"运行这些行.
我有一个问题,几个星期以来一直让我悲伤.当我更新到新的Facebook SDK时,我忘记了一段时间,但现在又回到了困扰我的梦想.
我基本上是一个Facebook提要阅读器.它从API调用中获取JSON数据,并使用它来填充ListView.每次自定义适配器调用getView()方法时,它都会检查它是什么类型的"状态".如果它是"照片"状态,则视图将具有两个图像(配置文件图片和状态更新的图片).我正在使用nostra13的通用图像加载器在使用持有者类膨胀ImageViews之后加载两个图像以帮助回收视图.这就是我认为我的问题存在的地方.
当我滚动列表时,所有配置文件图片加载正常并且工作得很好.但是当我滚动时,状态照片做了几件事:
1.)所有加载相同的图像(我之前没有遇到过这个问题,但我试图修复其他问题给自己).
2.)图像跳跃并且消失或出现在不同的视图中,而不是它们应该的.
3.)如果图像正确加载并且并非所有图像都显示相同的图像,则图像会随着我上下滚动而改变,最终会变成相同的图像.
我将发布我的getView()代码(抱歉它有点长).
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
try {
jsonObject = getItem(position);
jsonFrom = jsonObject.getJSONObject("from");
postType = jsonObject.getString("type");
posterName = jsonFrom.getString("name");
posterID = jsonFrom.getString("id");
posterPhoto = "http://graph.facebook.com/" + posterID
+ "/picture?type=square";
if (jsonObject.has("message")) {
posterMessage = jsonObject.getString("message");
} else {
posterMessage = jsonObject.getString("story");
}
} catch (JSONException e) {
e.printStackTrace();
}
if (postType.equals("status")) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView …Run Code Online (Sandbox Code Playgroud) 我正在尝试YouTubePlayerSupportFragment在ListView项目中使用a .该ListView是里面Fragment那是在Activity.由于存在嵌套片段,我正在使用该getChildFragmentManager()方法尝试从XML布局中查找片段.这是代码.
Java的
convertView = inflater.inflate(R.layout.youtube_post_layout, null);
YouTubePlayerSupportFragment youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_video);
if (youTubePlayerFragment == null) {
Log.i("YouTube", "player is null");
} else {
Log.i("YouTube", youTubePlayerFragment.toString());
}
Run Code Online (Sandbox Code Playgroud)
XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<include layout="@layout/post_base_layout" />
<fragment
android:name="com.google.android.youtube.player.YouTubePlayerSupportFragment"
android:id="@+id/youtube_video"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginLeft="62dp"
android:layout_marginRight="32dp"
android:background="@color/light_grey"
android:cropToPadding="true"
android:padding="1dp"
android:scaleType="centerCrop" />
<include layout="@layout/post_bottom_layout" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试通过findFragmentById()从XML获取它来创建片段时,它返回null,这就是发布到堆栈跟踪的内容.
我正在尝试关注YouTube API示例并对嵌套片段进行更改,但我无法找出导致问题的原因.
我有一个奇怪的问题,弄清楚的高度ActionBar.我的应用程序中有几个部分位于正下方ActionBar,我也使用了Chris Banes的库动作栏-drawtorefresh.
我将使用pull to refresh库中的示例.我正在遇到与此处问题完全相同的事情,除了我正在完成指南所说的一切Fragments.它基本上计算的高度ActionBar约为应有的一半.同样在应用程序的不同部分,我在PopupWindow下面定位ActionBar,所以我调用getHeight()并在窗口中使用该位置,我得到与pull to refresh库相同的问题.
所以这让我觉得这与ActionBar测量高度的方式有关,而且可能是一个风格问题.
但这里有趣的地方.如果我将设备旋转到横向模式,它会将高度精确地计算出来并将所有内容放在该点上,即使我旋转回纵向也是如此.它突然修复,直到我重新启动应用程序并从内存中删除它并重新开始.
有人有过类似的事吗?
注意:我现在正在使用appcompat库,但之前我使用的是ActionBarSherlock,以及某些时候的基本ActionBar,并且所有场景都给出了相同的结果.
更新1:我从这里,这里和这里的问题得到了相同的结果.然而,我正在做README所说的所有事情,所以我非常有信心这与我的设备如何测量ActionBar高度有关.
更新2:我在另一个活动中使用了操作栏PullToRefresh库,它工作正常,所以它必须与我的主要有关Activity.
android actionbarsherlock android-actionbar android-actionbar-compat
我遇到了Facebook图形API的问题,没有为获取用户通知的请求返回任何内容.我是通过批处理请求,使用相同的语法来获取用户的新闻源,并且新闻订阅源请求正常工作.我也启用了"manage_notifications"权限.当我尝试将图形调用的结果解析为通知时,我总是在代码中得到一个空指针异常.
请注意,当我在我的互联网浏览器中访问图形浏览器并输入"我/通知?include_read = true"时,我会获得相应的数据.
这是我的请求的代码.
static Request notificationsRequest = Request.newGraphPathRequest(fbSession, "me/notifications?include_read=true", new Request.Callback() {
@Override
public void onCompleted(Response response) {
GraphObject object = response.getGraphObject();
if(object != null){
notifications = object.getProperty("data").toString();
}
else{
notifications = "Notifications returns null";
}
}
});
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
编辑:我更新了代码,发现GraphObject对象返回null,这就是为什么它无法解析它的原因.看起来图形请求会出现问题,但我无法弄清楚它是什么.就像我说的,获取用户新闻源("我/家")的完全相同的方法完全正常.
我正在使用StickyListHeaders库,我很难弄清楚如何让它适用于我的特定应用程序.我想只在第二个列表项上有一个粘性标题.当我覆盖getHeaderId()方法并返回1时,它将标题放在列表的最顶部而不是第二个项目的顶部.滚动也很疯狂.有没有人使用这个图书馆取得了一些成功,可能知道发生了什么?
我正在使用MergeAdapter,因此可能导致获取我将其设置为ListView的位置的问题?
这是我的适配器代码:
private class ProfileMergeAdapter extends MergeAdapter implements StickyListHeadersAdapter{
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
LayoutInflater nameInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = (RelativeLayout) nameInflater.inflate(R.layout.name_line, null);
convertView.setLayoutParams(new LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
profilePhotoBottom = (ImageView) convertView.findViewById(R.id.profile_pic_bottom);
TextView userName = (TextView) convertView.findViewById(R.id.userName);
userName.setText(Utility.userName);
profilePhotoBottom.setImageBitmap(photoBMPbot);
return convertView;
}
@Override
public long getHeaderId(int position) {
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)