The following classes could not be instantiated: - com.facebook.widget.LoginButton
Solution 1
OPTION #1:
Sometimes, when a new resource is added, Eclipse doesn't compile correctly the new code (maybe a caching issue), causing this error.
Normally, simply restarting Eclipse is enough to fix the problem.
OPTION #2:
Sometimes, rendering custom views causes this exception. The only workaround I know is checking View.isInEditMode every time you try to use the getResources()
.
An example could be:
if (isInEditMode()) {
//do something else, as getResources() is not valid.
} else {
//you can use getResources()
String mystring = getResources().getString(R.string.mystring);
}
Solution 2
//write this first
FacebookSdk.sdkInitialize(getApplicationContext());
//then set contentview
setContentView(R.layout.activity_main);
Solution 3
If you are use android studio then its clear documentation here,
Use facebook with fragment Tutorial
User facebook without fragment
Step 1 :Create java file MyApplication.java inside your package.
and copu myApplicatyon.java
Step 2 :setup androidmenufest.xml
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Myapptheme"
android:name=".MyApplication"
>
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" />
<activity android:name="com.facebook.FacebookActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
Step 3 : Init inside activity where you are looking for init Login Button
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
callbackManager = CallbackManager.Factory.create();
FacebookSdk.sdkInitialize(getApplicationContext());
setContentView(R.layout.activity_auth_login);
//Init Elements
etEmail = (EditText) findViewById(R.id.etEmail);
etPassword = (EditText) findViewById(R.id.etPassword);
validator = new Validator(this);
validator.setValidationListener(this);
serverConnection = new ServerConnection();
//Faceboo login init
loginButton = (LoginButton) findViewById(R.id.btnFbLogin);
loginButton.setReadPermissions(Arrays.asList("public_profile","email","user_photos"));
// Other app specific specialization
// Callback registration
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Profile profile = Profile.getCurrentProfile();
Log.v("profile.getName:",profile.getName());
}
@Override
public void onCancel() {
// App code
}
@Override
public void onError(FacebookException exception) {
// App code
}
});
}
Coova
Updated on September 17, 2020Comments
-
Coova over 3 years
I have been working on getting the facebook practice apps working and I cannot for the life of me figure out why I cannot reference the LoginButton found in the Facebook SDK. Below is the error that I am encountering when I look at the layout that defines the LoginButton.
<com.facebook.widget.LoginButton android:id="@+id/authButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" />
The following classes could not be instantiated: - com.facebook.widget.LoginButton (Open Class, Show Error Log) See the Error Log (Window > Show View) for more details. Tip: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse android.content.res.Resources$NotFoundException: Could not resolve resource value: 0x7F070004. at android.content.res.BridgeResources.throwException(BridgeResources.java:693) at android.content.res.BridgeResources.getColor(BridgeResources.java:185) at com.facebook.widget.LoginButton.<init>(LoginButton.java:211) at sun.reflect.NativeConstructorAccessorImpl.newInstance0( at sun.reflect.NativeConstructorAccessorImpl.newInstance( at sun.reflect.DelegatingConstructorAccessorImpl.newInstance( at java.lang.reflect.Constructor.newInstance( at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:422) at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:179) at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207) at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135) at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:746) at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64) at android.view.LayoutInflater.rInflate(LayoutInflater.java:718) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:372)
-
gjnave over 10 yearsthis is very helpful comment which helps a number of other issues.
-
natur3 over 9 yearsOption #1 didnt help in Android Studio v0.8.14. Following tip message but I'm unsure how to implement this tip - thoughts?: Tip: Use View.isInEditMode() in your custom views to skip code or show sample data when shown in the IDE
-
natur3 over 9 yearsFound an answer to my own issue. I'm using navigation drawer and its calling the onCreateView() from the View. I simply added the following line View rootView = blah blah; rootView.isInEditMode(); This now allows me to use the graphical IDE for designing.
-
codemaniac almost 9 yearsOption #1 helped. ty