从 google play 服务 api 调用个人资料图片 url 时发生错误
Posted
技术标签:
【中文标题】从 google play 服务 api 调用个人资料图片 url 时发生错误【英文标题】:Error occured while calling profile image url from google play service api 【发布时间】:2014-01-06 14:15:14 【问题描述】:我想使用 google play service api 获取 google plus 个人资料图片。 我使用了 ImageManager.loadImage。
但我遇到了错误。 检查here。
这个错误已修复,但我已经修复了。
我的代码是这样的...
ImageManager im = ImageManager.create(getApplicationContext());
im.loadImage(new ImageManager.OnImageLoadedListener()
@Override
public void onImageLoaded(Uri uri, Drawable drawable)
Log.i("TAG", "please....");
, getGamesClient().getCurrentPlayer().getIconImageUri());
我的错误报告是这样的。
12-18 20:38:07.505: E/androidRuntime(15150): FATAL EXCEPTION: main
12-18 20:38:07.505: E/AndroidRuntime(15150): java.lang.RuntimeException: Unable to start receiver com.google.android.gms.common.images.ImageBroadcastReceiver: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.common.images.ImageManager$b
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2244)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.app.ActivityThread.access$1500(ActivityThread.java:138)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1279)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Handler.dispatchMessage(Handler.java:99)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Looper.loop(Looper.java:137)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.app.ActivityThread.main(ActivityThread.java:4870)
12-18 20:38:07.505: E/AndroidRuntime(15150): at java.lang.reflect.Method.invokeNative(Native Method)
12-18 20:38:07.505: E/AndroidRuntime(15150): at java.lang.reflect.Method.invoke(Method.java:511)
12-18 20:38:07.505: E/AndroidRuntime(15150): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
12-18 20:38:07.505: E/AndroidRuntime(15150): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
12-18 20:38:07.505: E/AndroidRuntime(15150): at dalvik.system.NativeStart.main(Native Method)
12-18 20:38:07.505: E/AndroidRuntime(15150): Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.common.images.ImageManager$b
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Parcel.readParcelable(Parcel.java:2077)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Parcel.readValue(Parcel.java:1965)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Parcel.readMapInternal(Parcel.java:2226)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Bundle.unparcel(Bundle.java:223)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.os.Bundle.getParcelable(Bundle.java:1165)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.content.Intent.getParcelableExtra(Intent.java:4226)
12-18 20:38:07.505: E/AndroidRuntime(15150): at com.google.android.gms.common.images.ImageBroadcastReceiver.onReceive(SourceFile:21)
12-18 20:38:07.505: E/AndroidRuntime(15150): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2237)
12-18 20:38:07.505: E/AndroidRuntime(15150): ... 10 more
【问题讨论】:
谢谢卡拉。我真的很感谢你的教导。 【参考方案1】:我在我的项目中使用此代码
ImageView player1IV = (ImageView) findViewById(R.id.iv_player_1_fs);
ImageView player2IV = (ImageView) findViewById(R.id.iv_player_2_fs);
TextView p1Name = (TextView) findViewById(R.id.tv_player_1_fs);
TextView p2Name = (TextView) findViewById(R.id.tv_player_2_fs);
ImageManager imageManager = ImageManager.create(getApplicationContext());
if (mRoomId != null)
MyLog.printLog("mRoomId :" + mRoomId + getGamesClient().toString());
for (Participant p : mParticipants)
String pid = p.getParticipantId();
if (pid.equals(mMyId))
MyLog.printLog("p.getIconImageUri()) :" + p.getIconImageUri());
MyLog.printLog("p.getHiResImageUri() :" + p.getHiResImageUri());
imageManager.loadImage(player1IV, p.getIconImageUri(), R.drawable.stub);
p1Name.setText(p.getDisplayName());
continue;
else
imageManager.loadImage(player2IV, p.getIconImageUri(), R.drawable.stub);
p2Name.setText(p.getDisplayName());
else
// load image
try
InputStream inputStream = getAssets().open("pp/" + mRoboticPlayer.getName() + ".jpg");
Drawable d = Drawable.createFromStream(inputStream, null);
player2IV.setImageDrawable(d);
catch (Exception e)
e.printStackTrace();
imageManager.loadImage(player2IV, R.drawable.stub);
p2Name.setText(mRoboticPlayer.getName());
【讨论】:
感谢您的帮助。但我仍然有同样的问题。我的 p.getIconImageUri 值是“content://com.google.android.gms.games.background/images/33407107/22”。是这样吗? 我现在确实解决了这个问题。你的代码工作得很好。谢谢贾廷 对不起贾廷马尔瓦尔。我的名声太低了。我如何接受你的回答? 您只需点击左侧右侧空白按钮即可接受。【参考方案2】:这看起来像是 Proguard 问题。 Google Play 游戏库被混淆了,所以它在运行时找不到必要的类。尝试将 AndroidManifest.xml 上的目标 API 级别设置为 17 或更高(这会改变 Proguard 的行为)并查看是否可以解决问题:
<uses-sdk android:minSdkVersion="9"
android:targetSdkVersion="17" />
【讨论】:
@Bruno 这个功能根本不起作用,请修复它。我知道您从事 Google 游戏框架的工作。以上是关于从 google play 服务 api 调用个人资料图片 url 时发生错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 Google Play Developer API 进行服务器端授权?
错误:用于调用 Google Play Developer API 的项目 ID 尚未在 Google Play Developer Console 中链接