2015-10-18 46 views
1

在我們的應用程序中,有些用戶在啓動應用程序時會遇到強制關閉。事實證明,Facebook按鈕有問題。我去的設計師,我看到一個灰色的矩形到位所需的按鈕,出現錯誤:Facebook LoginButton無法安裝

Rendering problems The following classes could not be instatiated: - com.facebook.login.widget.LoginButton (Open Class, Show Exception, Clear Cache) Tip: User View.isInEditMode() in your custom views to skip code data when shown in the IDE

Exception Details java.lang.NoSuchFieldError: com_facebook_login_view_com_facebook_confirm_logout at com.facebook.login.widget.LoginButton.parseLoginButtonAttributes(LoginButton.java:591) at com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:551) at com.facebook.FacebookButtonBase.(FacebookButtonBase.java:66) at 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) at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:437) at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:154) at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:93) at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:190) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:214) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:142) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:806) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) at android.view.LayoutInflater.rInflate(LayoutInflater.java:782) at android.view.LayoutInflater.inflate(LayoutInflater.java:504) at android.view.LayoutInflater.inflate(LayoutInflater.java:385) at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:413) at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321) at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:511) at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:499) at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:888) at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:499) at com.android.tools.idea.rendering.RenderTask.access$600(RenderTask.java:72) at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:611) at com.android.tools.idea.rendering.RenderTask$3.call(RenderTask.java:608) at com.android.tools.idea.rendering.RenderService.runRenderAction(RenderService.java:363) at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:608) at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:630) at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320) at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310) at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269) at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227) at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217) at 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) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at 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

'在我們的一個應用程序中,一些用戶在啓動應用程序時遇到了一個關閉的力量。「您是否有堆棧跟蹤。 這似乎是來自IDE的錯誤。 – VenomVendor

+0

添加了堆棧跟蹤並添加了Activity代碼,希望有所幫助。 – erdomester

回答

0

的問題是

btn_fblogin.setBackgroundResource(R.drawable.btn_facebook_selector); 

btn_fblogin爲空,你必須確保ID @+id/login_buttonactivity_splash.xml存在。

編輯: 如果您在activity_splash.xml有CustomView那就試試這個 - >https://stackoverflow.com/a/30785533/1008278

+0

神奇的想法,我該怎麼做?我可以檢查它是否爲空,然後將其隱藏。請參閱 – erdomester

+0

。我的。編輯 – VenomVendor

0

我碰到這樣的問題之前,我用我自己的按鈕調用loginbuton的點擊(臉譜解決)btn_fblogin.callOnClick();

//渲染問題是因爲你在運行時設置的這兩行 btn_fblogin.setBackgroundResource(R.drawable.btn_facebook_selector); btn_fblogin.setCompoundDrawablesWithIntrinsicBounds(0,0,0,0);