0

I'm trying to develop basic facebook activty and The app will get username and display it in screen but I'm facing a kind of FATAL EXCEPTION: main error I have provided my complete set of codes starting with manifest file, class file, xml file and the Logcat error,your help is highly required

The below provided code is my manifest file

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.world.trialwithmugaputhagam">

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:name=".MyApplicatioon"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <activity android:name=".MainFragment" />
</application>

The below code is the class file I have used.In below code I have also assigned mTextDetails but when I hover the cursor it say the value is not assigned

import android.os.Bundle;
import android.app.Fragment;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

public class MainActivity extends Fragment {

private TextView mTextDetails;
private CallbackManager mcallbackManager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
    mcallbackManager=CallbackManager.Factory.create();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(R.layout.activity_main,container,false);
}


private FacebookCallback<LoginResult> mcallback = new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        AccessToken accessToken = loginResult.getAccessToken();
        Profile profile = Profile.getCurrentProfile();
        if (profile != null){
            mTextDetails.setText("Welcome "+ profile.getName());
        }
    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onError(FacebookException error) {

    }
};



@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    LoginButton loginButton = (LoginButton)    view.findViewById(R.id.login_button);
    loginButton. setReadPermissions("user_friends");
    loginButton. setFragment(this);
    loginButton.registerCallback(mcallbackManager, mcallback);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    mcallbackManager.onActivityResult(requestCode, resultCode, data);
}}

The below code is my XML file

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.world.trialwithmugaputhagam.MainActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Welcome"
    android:id="@+id/text_details"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_above="@+id/login_button"/>

<com.facebook.login.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="30dp"
    android:layout_marginBottom="30dp"
    android:layout_centerInParent="true"/></RelativeLayout>

Logcat error Sorry about the wrong alignment.

FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.world.trialwithmugaputhagam/com.example.world.trialwithmugaputhagam.MainActivity}: java.lang.ClassCastException: com.example.world.trialwithmugaputhagam.MainActivity cannot be cast to android.app.Activity
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
                                                                                       at android.app.ActivityThread.access$600(ActivityThread.java:141)
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                       at android.os.Looper.loop(Looper.java:137)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5103)
                                                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                                                       at java.lang.reflect.Method.invoke(Method.java:525)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                                       at dalvik.system.NativeStart.main(Native Method)
                                                                                    Caused by: java.lang.ClassCastException: com.example.world.trialwithmugaputhagam.MainActivity cannot be cast to android.app.Activity
                                                                                       at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
                                                                                       at android.app.ActivityThread.access$600(ActivityThread.java:141) 
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:99) 
                                                                                       at android.os.Looper.loop(Looper.java:137) 
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:5103) 
                                                                                       at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                                       at java.lang.reflect.Method.invoke(Method.java:525) 
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
                                                                                       at dalvik.system.NativeStart.main(Native Method)
Anoop M Maddasseri
  • 10,213
  • 3
  • 52
  • 73
Eggsy
  • 133
  • 2
  • 6
  • 15
  • you can not cast Fragment to activity. try to extends FragmentActivity ,AppCompatActivity or Activity. Otherwise why you need fragment ? – Tarun Sharma Mar 22 '16 at 06:59
  • Possible duplicate of http://stackoverflow.com/questions/35988502/android-facebook-get-null-profile/35989033#35989033 – Jay Rathod Mar 22 '16 at 07:07

1 Answers1

0

Because you are extending MainActivity from Fragment. Thus, your MainActivity is not actually an Activity but a Fragment. Extend it from Activity or subclasses of Activity.

Like this:

MainActivity extends AppCompatActivity

Edit 1: (Based on comments):

You haven't initialized mTextDetails; try to do like this in Activity's onCreate:

mTextDetails = (TextView)findViewById(R.id.text_view_id);

Rohit Arya
  • 6,751
  • 1
  • 26
  • 40
  • Yes I have tried it but it leaves me with error on onCreateView and onViewCreated saying "Cannot reolve method" – Eggsy Mar 22 '16 at 06:58
  • Yes, because those methods belongs to `Fragment` not `Activity`. Load the layout inside `onCreate` of the `Activity`. – Rohit Arya Mar 22 '16 at 07:00
  • I just removed the code which blinked with errors and the now the program executes successfully with **MainActivity extends AppCompatActivity** but still i am not able to fetch the facebook username – Eggsy Mar 22 '16 at 07:04
  • That's different problem, try to check this Facebook SDK. Or add the error log here. – Rohit Arya Mar 22 '16 at 07:06
  • when I hover above ** private TextView mTextDetails;** It shows **mTextDetails** is never assigned but I have assigned it in line 49 – Eggsy Mar 22 '16 at 07:08
  • @Eggsy, look at the updated answer. Can you also upvote my answer? – Rohit Arya Mar 22 '16 at 07:11
  • sure once I get 15 reps I am new develop :) – Eggsy Mar 22 '16 at 07:31