在我们的某个应用中,某些用户在启动应用时会遇到强制关闭。事实证明,Facebook按钮出现了问题。我去设计师,我看到一个灰色的矩形代替了所需的按钮,错误:
渲染问题 以下类无法实例化: - com.facebook.login.widget.LoginButton(Open Class,Show Exception,Clear Cache) 提示:自定义视图中的用户View.isInEditMode()在IDE中显示时跳过代码数据
异常细节 java.lang.NoSuchFieldError:com_facebook_login_view_com_facebook_confirm_logout 在com.facebook.login.widget.LoginButton.parseLoginButtonAttributes(LoginButton.java:591) 在com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:551) 在com.facebook.FacebookButtonBase。(FacebookButtonBase.java:66) 在com.facebook.login.widget.LoginButton。(LoginButton.java:200) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 在org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:437) 在org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:154) 在org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:93) 在com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:190) 在android.view.BridgeInflater.loadCustomView(BridgeInflater.java:214) 在android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:142) 在android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806) 在android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:782) 在android.view.LayoutInflater.inflate(LayoutInflater.java:504) 在android.view.LayoutInflater.inflate(LayoutInflater.java:385) 在com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:413) 在com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321) 在com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) 在com.android.tools.idea.rendering.RenderTask $ 2.compute(RenderTask.java:511) 在com.android.tools.idea.rendering.RenderTask $ 2.compute(RenderTask.java:499) 在com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888) 在com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:499) 在com.android.tools.idea.rendering.RenderTask.access $ 600(RenderTask.java:72) 在com.android.tools.idea.rendering.RenderTask $ 3.call(RenderTask.java:611) 在com.android.tools.idea.rendering.RenderTask $ 3.call(RenderTask.java:608) 在com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:363) 在com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:608) 在com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:630) 在com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel $ 6.run(AndroidDesignerEditorPanel.java:480) 在com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) 在com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) 在com.intellij.util.ui.update.MergingUpdateQueue $ 2.run(MergingUpdateQueue.java:254) 在com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) 在com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) 在com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) 在com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238) at com.intellij.util.Alarm $ Request $ 1.run(Alarm.java:351) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(Thread.java:744)
虽然这似乎是一个IDE问题,但我从用户那里获得的堆栈跟踪是相同的:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.yolify.android/com.yolify.android.Activity_Splash}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.login.widget.LoginButton.setBackgroundResource(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2802)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2867)
at android.app.ActivityThread.access$900(ActivityThread.java:181)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1476)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6134)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.facebook.login.widget.LoginButton.setBackgroundResource(int)' on a null object reference
at com.yolify.android.Activity_Splash.onCreate(Activity_Splash.java:214)
at android.app.Activity.performCreate(Activity.java:6374)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746)
... 10 more
活动
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();
tracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(com.facebook.AccessToken oldAccessToken, com.facebook.AccessToken currentAccessToken) {
}
};
tracker.startTracking();
setContentView(R.layout.activity_splash);
btn_fblogin = (LoginButton) findViewById(R.id.login_button);
btn_fblogin.setBackgroundResource(R.drawable.btn_facebook_selector);
btn_fblogin.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
btn_fblogin.setReadPermissions(PERMISSIONS);
btn_fblogin.registerCallback(mCallbackManager, mCallback);
btn_fblogin.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if(CheckNetwork.isInternetAvailable(Activity_Splash.this)) {
LoginManager.getInstance().logInWithReadPermissions(Activity_Splash.this, PERMISSIONS);
} else {
Toast.makeText(getApplicationContext(), "Please check your internet connection", Toast.LENGTH_SHORT).show();
}
}
});
...
}
就像Facebook按钮在他们的手机上不存在一样。这是一个正常的活动。 Facebook sdk被添加为依赖项(.aar文件,而不是gradle)。所有Facebook相关的进口都很好。 Min SDK是15,错误来自Android 4.1到5.0。 怎么了?
答案 0 :(得分:0)
问题出在
btn_fblogin.setBackgroundResource(R.drawable.btn_facebook_selector);
btn_fblogin
为空,您必须确保@+id/login_button
中存在ID activity_splash.xml
。
修改强>
如果您在activity_splash.xml
中有自定义视图,那么试试这个 - > https://stackoverflow.com/a/30785533/1008278
答案 1 :(得分:0)
之前我有这样的问题,我通过使用我自己的按钮来解决,该按钮调用loginbuton(facebook)的点击btn_fblogin.callOnClick();
//渲染问题是因为您在运行时设置了这两行 btn_fblogin.setBackgroundResource(R.drawable.btn_facebook_selector); btn_fblogin.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);