Xamarin.android 将Mono用于Android和Java绑定时出现Java.Lang.NoSuchFieldError
所以我正在试用Xamarin,它使用 面对最初的问题,我不得不下载并编译最新的Facebook for Android SDK(使用Eclipse),并将其压缩到Facebook java绑定项目中 但是,单击注销按钮时,出现以下错误:Xamarin.android 将Mono用于Android和Java绑定时出现Java.Lang.NoSuchFieldError,xamarin.android,java-binding,Xamarin.android,Java Binding,所以我正在试用Xamarin,它使用 面对最初的问题,我不得不下载并编译最新的Facebook for Android SDK(使用Eclipse),并将其压缩到Facebook java绑定项目中 但是,单击注销按钮时,出现以下错误: Java.Lang.NoSuchFieldError: com.facebook.android.R$drawable.close at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android
Java.Lang.NoSuchFieldError: com.facebook.android.R$drawable.close
at Android.Runtime.JNIEnv.CallVoidMethod (intptr,intptr,Android.Runtime.JValue[]) [0x00023] in /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.4-branch/74c352d0/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:368
at Com.Facebook.Android.Facebook.Authorize (Android.App.Activity,string[],Com.Facebook.Android.Facebook/IDialogListener) <IL 0x00095, 0x002af>
at Com.Facebook.Android.LoginButton/ButtonOnClickListener.OnClick (Android.Views.View) [0x00051] in C:\Users\magnus\Downloads\xamarin-monodroid-samples-7e2c105\xamarin-monodroid-samples-7e2c105\Facebook\samples\simple\simple\Example.cs:140
at Android.Views.View/IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (intptr,intptr,intptr) [0x00010] in /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.4-branch/74c352d0/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Android.Views.View.cs:600
at (wrapper dynamic-method) object.9681ec74-91e4-4ca3-93b5-489e6e022fb2 (intptr,intptr,intptr) <IL 0x00012, 0x0001b>
--- End of managed exception stack trace ---
java.lang.NoSuchFieldError: com.facebook.android.R$drawable.close
at com.facebook.android.FbDialog.createCrossImage(FbDialog.java:106)
at com.facebook.android.FbDialog.onCreate(FbDialog.java:81)
at android.app.Dialog.dispatchOnCreate(Dialog.java:307)
at android.app.Dialog.show(Dialog.java:225)
at com.facebook.android.Facebook.dialog(Facebook.java:814)
at com.facebook.android.Facebook.startDialogAuth(Facebook.java:343)
at com.facebook.android.Facebook.authorize(Facebook.java:206)
at com.facebook.android.Facebook.authorize(Facebook.java:125)
at com.facebook.android.LoginButton_ButtonOnClickListener.n_onClick(Native Method)
at com.facebook.android.LoginButton_ButtonOnClickListener.onClick(LoginButton_ButtonOnClickListener.java:36)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Java.Lang.NoSuchFieldError:com.facebook.android.R$drawable.close
在/Users/builder/data/lanes/monodroid-mac-monodroid-4.2.4-branch/74c352d0/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.g.cs:368中的Android.Runtime.JNIEnv.CallVoidMethod(intptr,intptr,Android.Runtime.JValue[])[0x00023]
访问Com.Facebook.Android.Facebook.Authorize(Android.App.Activity,string[],Com.Facebook.Android.Facebook/IDialogListener)
在C:\Users\magnus\Downloads\xamarin-monodroid-samples-7e2c105\xamarin-monodroid-samples-7e2c105\xamarin-monodroid-samples-7e2c105\Facebook\samples\simple\simple\Example.cs:140中的Com.Facebook.Android.LoginButton/button-nonclicklistener.OnClick(Android.View.View)[0x00051]
在/Users/builder/data/lanes/monodroid-mac-monodroid-4.2-branch/74c352d0/source/monodroid/src/Mono.Android/platforms/Android/8/src/generated/Android.Views.cs:600中的Android.Views.View/ionclick-listenerinvoker.n\OnClick\u-Landroid\u视图
at(包装器动态方法)object.9681ec74-91e4-4ca3-93b5-489e6e022fb2(intptr、intptr、intptr)
---托管异常堆栈跟踪的结束---
java.lang.NoSuchFieldError:com.facebook.android.R$drawable.close
在com.facebook.android.fdialog.createCrossImage上(fdialog.java:106)
在com.facebook.android.fbalog.onCreate(fbalog.java:81)上
在android.app.Dialog.dispatchOnCreate(Dialog.java:307)上
在android.app.Dialog.show上(Dialog.java:225)
访问com.facebook.android.facebook.dialog(facebook.java:814)
在com.facebook.android.facebook.startdialoguth(facebook.java:343)
访问com.facebook.android.facebook.authorize(facebook.java:206)
访问com.facebook.android.facebook.authorize(facebook.java:125)
在com.facebook.android.LoginButton_buttonnonclicklistener.n_onClick(本机方法)上
在com.facebook.android.LoginButton_buttonnonclicklistener.onClick(LoginButton_buttonnonclicklistener.java:36)
在android.view.view.performClick上(view.java:2485)
在android.view.view$PerformClick.run(view.java:9080)
位于android.os.Handler.handleCallback(Handler.java:587)
位于android.os.Handler.dispatchMessage(Handler.java:92)
位于android.os.Looper.loop(Looper.java:130)
位于android.app.ActivityThread.main(ActivityThread.java:3683)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:507)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:839)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
在dalvik.system.NativeStart.main(本机方法)
在EclipseJava项目中使用完全相同的JAR效果很好。似乎缺少
R$drawable.close
资源,但它存在于Zip文件中。
有什么问题吗?啊,是的,这个问题。这有点令人头痛,但是如果你查看java代码,facebook对话框中的关闭按钮是在代码中设置的。因此,当应用程序编译时,它找不到关闭按钮的id 解决方法是更改
FBDialog.java
文件,以某种方式接收在Resource.Designer.cs文件中生成的资源的closeinteger
id
private void createCrossImage(int value) {
mCrossImage = new ImageView(getContext());
// Dismiss the dialog when user click on the 'x'
mCrossImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.onCancel();
FbDialog.this.dismiss();
}
});
Drawable crossDrawable = getContext().getResources().getDrawable(value);
mCrossImage.setImageDrawable(crossDrawable);
/* 'x' should not be visible while webview is loading
* make it visible only after webview has fully loaded
*/
mCrossImage.setVisibility(View.INVISIBLE);
}
我修改了java代码并重新编译了.jar文件,这样我就可以从我的Resources
文件中传入int
值,这样我就不用担心它找不到特定图像的id