2015-04-17 18 views
5

Tôi đã tích hợp facebook sdk trong dự án studio android nhưng lực lượng ứng dụng sẽ đóng ngay khi tôi chạy ứng dụng. Có lỗi jsonexception trong thiết kế mà tôi đã sử dụng com.facebook.login.widget.LoginButton, nhưng nó chỉ là lỗi thiết kế.ứng dụng forcecloses khi bắt đầu hoạt động facebook

lỗi đăng nhập:

> 04-17 19:29:35.996 24734-24734/com.example.bandhan.myapplication1 
> E/AndroidRuntime﹕ FATAL EXCEPTION: main 
>  Process: com.example.bandhan.myapplication1, PID: 24734 
>  java.lang.ExceptionInInitializerError 
>    at java.lang.reflect.Constructor.newInstance(Native Method) 
>    at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>    at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>    at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>    at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>    at android.app.Activity.setContentView(Activity.java:2267) 
>    at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>    at android.app.Activity.performCreate(Activity.java:6289) 
>    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>    at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>    at android.os.Handler.dispatchMessage(Handler.java:102) 
>    at android.os.Looper.loop(Looper.java:145) 
>    at android.app.ActivityThread.main(ActivityThread.java:5944) 
>    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:1389) 
>    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 
>  Caused by: null 
>    at com.facebook.internal.Validate.sdkInitialized(Validate.java:99) 
>    at com.facebook.FacebookSdk.getCallbackRequestCodeOffset(FacebookSdk.java:735) 
>    at com.facebook.internal.CallbackManagerImpl$RequestCodeOffset.toRequestCode(CallbackManagerImpl.java:109) 
>    at com.facebook.login.widget.LoginButton.<clinit>(LoginButton.java:58) 
>             at java.lang.reflect.Constructor.newInstance(Native Method) 
>             at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
>             at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
>             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750) 
>             at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
>             at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
>             at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:435) 
>             at android.app.Activity.setContentView(Activity.java:2267) 
>             at com.example.bandhan.myapplication1.Share_Activity.onCreate(Share_Activity.java:15) 
>             at android.app.Activity.performCreate(Activity.java:6289) 
>             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
>             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) 
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2760) 
>             at android.app.ActivityThread.access$900(ActivityThread.java:177) 
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) 
>             at android.os.Handler.dispatchMessage(Handler.java:102) 
>             at android.os.Looper.loop(Looper.java:145) 
>             at android.app.ActivityThread.main(ActivityThread.java:5944) 
>             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:1389) 
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184) 

hãy giúp tôi giải quyết vấn đề. Cảm ơn bạn.

Trả lời

10

Nếu bạn nhìn vào dòng 99 trong lớp Validate của Facebook, bạn sẽ thấy nó ném một FacebookSdkNotInitializedException

Bạn cần phải gọi FacebookSdk.sdkInitialize(Context) trước khi bạn LoginButton được nạp (tức là cuộc gọi của bạn để setContentView())

Vì vậy, trong Activity của bạn 's onCreate phương pháp:

public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    setContentView(R.layout.my_layout); // Now you can set the layout with the LoginButton 
} 

Bất cứ lúc nào bạn sẽ sử dụng các thành phần Facebook, bạn cần đảm bảo rằng t SDK của anh ta được khởi tạo.

Cũng đảm bảo bạn có khóa siêu dữ liệu cho ID ứng dụng Facebook trong tệp kê khai của mình, nếu không bạn sẽ gặp sự cố khác khi bạn thực sự nhấn LoginButton.

+0

Yup, bạn đã hiểu đúng. Tiếng Anh> Tiếng Việt. Nhưng vấn đề là tôi không thể sử dụng dữ liệu fb: fetch_user trong xml và uilifecycle trong tệp java.Everything khác hoạt động hoàn hảo. Cảm ơn bạn. –

+0

Miễn là bạn thực hiện cuộc gọi đến FacebookSdk.sdkInitialize trước khi thêm XML chứa dữ liệu Facebook của bạn thì bạn nên tốt – Guardanis

+0

thực sự fb: fetch_user dữ liệu trong xml và uilifecycle trong tệp java không được lấy từ thư viện. Btw tôi đang sử dụng phiên bản mới nhất của fbsdk. Cảm ơn bạn –

0

Thành thật mà nói, giải pháp đó không phải là bằng chứng đánh lừa.

Mặc dù tôi đã gọi mã khởi tạo trước setContentView(), tôi vẫn nhận được báo cáo về ngoại lệ đó.

Những gì bạn có thể làm cũng thêm điều kiện if để đảm bảo rằng Facebook đã hoàn tất quá trình khởi tạo.

nếu (FacebookSdk.isInitialized()) // mời ứng dụng của bạn ở đây

Các vấn đề liên quan