Android Twitter获取个人资料图像大小问题

Android Twitter获取个人资料图像大小问题,android,image,twitter,twitter4j,Android,Image,Twitter,Twitter4j,我正在尝试获取我的追随者的个人资料图像,作为缩略图在ListView中使用 这些缩略图大约是125x125,但是是User.getProfileImageURL()的标准twitter4j调用;返回小得多的48x48大小,也建议不要用作图像源 我尝试创建一个ProfileImage对象并将其作为参数User.getProfileImageURL(profile image object.Original)提供 但是这段代码需要一些时间来简单地检索url,这在加载缩略图列表时效率很低 有什么关于如

我正在尝试获取我的追随者的个人资料图像,作为缩略图在ListView中使用

这些缩略图大约是125x125,但是是User.getProfileImageURL()的标准twitter4j调用;返回小得多的48x48大小,也建议不要用作图像源

我尝试创建一个ProfileImage对象并将其作为参数User.getProfileImageURL(profile image object.Original)提供

但是这段代码需要一些时间来简单地检索url,这在加载缩略图列表时效率很低

有什么关于如何进行的建议吗

编辑 Twitter API v1已被禁用,因此我的旧答案不再有效。请参阅API v1.1,我认为它需要身份验证

如果您知道屏幕名称,则允许您以4种不同的分辨率获取配置文件图像

“更大”的图像是73x73,它将在125x125容器中插值。如果您对此不满意,可以尝试获取“原始”照片,但这张照片可能非常大(速度较慢),并且不一定是正方形

无论您选择何种方法,请确保您没有在UI线程上获取和/或解码位图。Android API文档提供了正确的方法

此外,我们还可以使用Twitter4j:


mTwitter.getUserProfileImage()

例如,您可以使用
getOriginalProfileImageURL()
。这是最大的。 较小的是
getBiggerProfileImageURL()
getProfileImageURL()

以下是您检索的URL:

http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD_normal.jpeg
http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD_bigger.jpeg
http://pbs.twimg.com/profile_images/NUMBER/c62p-cAD.jpeg
从官方文件:

您可以从
GET users/show
获取用户的最新配置文件图像。在用户对象中,您可以找到
profile\u image\u url
profile\u image\u url\u https
字段。这些字段将包含 调整了用户上传图像的“正常”变体的大小。这是“正常的” 变型通常为48x48px

通过修改URL,您可以检索其他变量大小,例如 “更大”、“迷你”和“原创”

遵守守则:

TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
twitterApiClient.getAccountService().verifyCredentials(false, false, new Callback<User>() {
    @Override
    public void success(Result<User> userResult) {
        String name = userResult.data.name;
        String email = userResult.data.email;

        // _normal (48x48px) | _bigger (73x73px) | _mini (24x24px)  
        String photoUrlNormalSize   = userResult.data.profileImageUrl;
        String photoUrlBiggerSize   = userResult.data.profileImageUrl.replace("_normal", "_bigger");
        String photoUrlMiniSize     = userResult.data.profileImageUrl.replace("_normal", "_mini");
        String photoUrlOriginalSize = userResult.data.profileImageUrl.replace("_normal", "");
    }

    @Override
    public void failure(TwitterException exc) {
        Log.d("TwitterKit", "Verify Credentials Failure", exc);
    }
});

谢谢你的回复,我已经知道你所说的了。我的问题是,为什么仅仅获取图像“原始”版本的URL是一项耗时的任务?只是得到一根线?当我试图通过ProfileImage.Original实现这一点时,仅仅返回链接就花费了一秒钟多的时间。但是链接不只是一个url对象或字符串吗?感谢您提供的任何信息如果您查看twitter4j的源代码,User的LazyUser实现实际上不会在构造函数中从twitter获取数据。它将此延迟到第一个方法调用实际需要该信息,然后保留该信息以供将来的方法调用。我很困惑,您能进一步说明吗?基本上,我正在迭代状态对象,只想获得原始大小的图像以填充大缩略图,但是我上面在获取这个URL时描述的调用太昂贵,导致我的提要显示慢了几秒钟。对。第一次对给定用户对象调用getProfileImageURL()时,网络操作正在发生。在构建listview之前,每个用户执行一次此方法调用,或者您可以自己构造URL(如果您已经拥有用户名字符串)。
TwitterApiClient twitterApiClient = TwitterCore.getInstance().getApiClient();
twitterApiClient.getAccountService().verifyCredentials(false, false, new Callback<User>() {
    @Override
    public void success(Result<User> userResult) {
        String name = userResult.data.name;
        String email = userResult.data.email;

        // _normal (48x48px) | _bigger (73x73px) | _mini (24x24px)  
        String photoUrlNormalSize   = userResult.data.profileImageUrl;
        String photoUrlBiggerSize   = userResult.data.profileImageUrl.replace("_normal", "_bigger");
        String photoUrlMiniSize     = userResult.data.profileImageUrl.replace("_normal", "_mini");
        String photoUrlOriginalSize = userResult.data.profileImageUrl.replace("_normal", "");
    }

    @Override
    public void failure(TwitterException exc) {
        Log.d("TwitterKit", "Verify Credentials Failure", exc);
    }
});
 private final int PROFILE_PIC_SIZE = 90;
 Bitmap originalPic = null;
 Bitmap resizedPic = null;
 try {
     InputStream in = new java.net.URL(photoUrlOriginalSize).openStream();
     originalPic = BitmapFactory.decodeStream(in);
     resizedPic = Bitmap.createScaledBitmap(originalPic, PROFILE_PIC_SIZE, PROFILE_PIC_SIZE, false);
 } catch (Exception exc) {
     Log.e("Error", exc.getMessage());
     exc.printStackTrace();
 }