added facebook SDK now unable to resume activity force close

10,628

Solution 1

Have you set meta-data applicationId in your AndroidManifest.xml under application tag yet?

<application ...>
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>
</application>

And also don't forget to define app_id string resource in your strings.xml as well.

<string name="app_id">xxxxxxxxxxxx</string>

For more information, https://developers.facebook.com/docs/android/getting-started

Solution 2

Facebook's quick start guide is currently wrong. They are missing a few critical steps:

  • Initialize the SDK
  • Store the app ID

Specifically, you need to add this to your activity where you want to use the AppEventsLogger.activateApp(this):

 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     FacebookSdk.sdkInitialize(getApplicationContext());
}

And you need to store the app ID:

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

And the strings.xml value:

<string name="facebook_app_id">your_id_here</string>

Annoying that their Quick Start guide actually causes more issues than it solves right now!

Solution 3

In case somebody has this problem too, for me this was corrected by using: AppEventsLogger.activateApp(context,ID), i.e. AppEventsLogger.activateApp(this,"your-fb-id"). The id declared as string was used by Manifest, but give me problems in the activity, considering that this value was empty.

Solution 4

I am using Facebook SDK v4.13. I needed to do the following changes to track application install and analytics.

AndroidManifest.xml

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

SDK seems to pool the activity in a local file. So this permission is a must if you have not given yet.

I load the Application Id in the code

AppEventsLogger.activateApp(this, Constants.FACEBOOK_APP_ID);
Share:
10,628
Mike
Author by

Mike

Updated on July 22, 2022

Comments

  • Mike
    Mike almost 2 years

    My activity is throwing this error on crash:

    java.lang.RuntimeException: Unable to resume activity {com.beerportfolio.beerportfoliopro/com.example.mike.beerportfoliomaterial.MainDrawer2}: java.lang.IllegalArgumentException: Both context and applicationId must be non-null
           at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3069)
           at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3098)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2469)
           at android.app.ActivityThread.access$900(ActivityThread.java:172)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:146)
           at android.app.ActivityThread.main(ActivityThread.java:5653)
           at java.lang.reflect.Method.invokeNative(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:515)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
           at dalvik.system.NativeStart.main(NativeStart.java)
    Caused by: java.lang.IllegalArgumentException: Both context and applicationId must be non-null
           at com.facebook.AppEventsLogger.activateApp(AppEventsLogger.java:273)
           at com.facebook.AppEventsLogger.activateApp(AppEventsLogger.java:260)
           at com.example.mike.beerportfoliomaterial.MainDrawer2.onResume(MainDrawer2.java:179)
           at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1198)
           at android.app.Activity.performResume(Activity.java:5618)
           at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3059)
           at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3098)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2469)
           at android.app.ActivityThread.access$900(ActivityThread.java:172)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1308)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:146)
           at android.app.ActivityThread.main(ActivityThread.java:5653)
           at java.lang.reflect.Method.invokeNative(Method.java)
           at java.lang.reflect.Method.invoke(Method.java:515)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1291)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
           at dalvik.system.NativeStart.main(NativeStart.java)
    

    My code for the activity is:

    import android.IntentIntegrator;
    import android.IntentResult;
    import android.annotation.TargetApi;
    import android.app.SearchManager;
    import android.content.Context;
    import android.content.Intent;
    import android.content.res.Configuration;
    import android.os.Build;
    import android.os.Bundle;
    import android.support.v4.app.ActionBarDrawerToggle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentActivity;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.widget.SearchView;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.EditText;
    import android.widget.ListView;
    import android.widget.Spinner;
    import android.widget.Toast;
    import com.facebook.Session;
    
    import com.facebook.AppEventsLogger;
    
    
    /**
     * Created by Mike and Simon on 2/22/14.
     */
    public class MainDrawer2 extends ActionBarActivity
    {
        private static final String EXTRA_NAV_ITEM    = "extraNavItem";
        private static final String STATE_CURRENT_NAV = "stateCurrentNav";
    
        private ActionBarDrawerToggle mDrawerToggle;
        private DrawerLayout mDrawerLayout;
    
    
        private NavDrawerListAdapter mDrawerAdapter;
        private ListView mDrawerList;
    
        private CharSequence mTitle;
        private CharSequence mDrawerTitle;
    
        private MainNavItem mCurrentNavItem;
    
    
        public static Intent createLaunchFragmentIntent(Context context, MainNavItem navItem)
        {
            return new Intent(context, MainDrawer2.class)
                    .putExtra(EXTRA_NAV_ITEM, navItem.ordinal());
        }
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.fragment_main);
    
    
    
            //Crashlytics.start(this);
    
            mTitle = mDrawerTitle = getTitle();
            mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
            mDrawerList   = (ListView)findViewById(R.id.drawer);
    
            // Set a toolbar to replace the action bar.
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            toolbar.setTitleTextColor(0xFFFFFFFF);
    
            setSupportActionBar(toolbar);
    
            //getActionBar().setDisplayHomeAsUpEnabled(true);
            //enableHomeButtonIfRequired();
    
            mDrawerAdapter = new NavDrawerListAdapter(getApplicationContext());
            mDrawerList.setAdapter(mDrawerAdapter);
            mDrawerList.setOnItemClickListener(new ListView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    displayNavFragment((MainNavItem)parent.getItemAtPosition(position));
    
                    if(mDrawerLayout.isDrawerOpen(mDrawerList)) {
                        mDrawerLayout.closeDrawer(mDrawerList);
    
                    }
                    else {
                        mDrawerLayout.openDrawer(mDrawerList);
                    }
                }
            });
    
            mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                    R.drawable.ic_menu_white, R.string.app_name, R.string.app_name)
            {
                public void onDrawerClosed(View view)
                {
                    //getActionBar().setTitle(mTitle);
                    invalidateOptionsMenu();
                }
    
                public void onDrawerOpened(View drawerView)
                {
                    //getActionBar().setTitle(mDrawerTitle);
                    invalidateOptionsMenu();
                }
            };
    
            mDrawerLayout.setDrawerListener(mDrawerToggle);
    
            if(getIntent().hasExtra(EXTRA_NAV_ITEM)){
                MainNavItem navItem = MainNavItem.values()
                        [getIntent().getIntExtra(EXTRA_NAV_ITEM,
                        MainNavItem.STATISTICS.ordinal())];
                displayNavFragment(navItem);
            }
            else if(savedInstanceState != null){
                mCurrentNavItem = MainNavItem.values()
                        [savedInstanceState.getInt(STATE_CURRENT_NAV)];
                setCurrentNavItem(mCurrentNavItem);
            }
            else{
                displayNavFragment(MainNavItem.STATISTICS);
            }
        }
    
        @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        private void enableHomeButtonIfRequired()
        {
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH){
                //getActionBar().setHomeButtonEnabled(true);
            }
        }
        public void setActionBarTitle(String title) {
            //getActionBar().setTitle(title);
        }
    
    
        @Override
        public void setTitle(CharSequence title)
        {
            mTitle = title;
            //getActionBar().setTitle(mTitle);
        }
    
        @Override
        protected void onPostCreate(Bundle savedInstanceState)
        {
            super.onPostCreate(savedInstanceState);
            // Sync the toggle state after onRestoreInstanceState has occurred.
            mDrawerToggle.syncState();
        }
    
        @Override
        public void onConfigurationChanged(Configuration newConfig)
        {
            super.onConfigurationChanged(newConfig);
            // Pass any configuration change to the drawer toggles
            mDrawerToggle.onConfigurationChanged(newConfig);
        }
    
        @Override
        protected void onResume() {
            super.onResume();
    
            // Logs 'install' and 'app activate' App Events.
            AppEventsLogger.activateApp(this);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
    
            // Logs 'app deactivate' App Event.
            AppEventsLogger.deactivateApp(this);
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState)
        {
            super.onSaveInstanceState(outState);
    
            if (mCurrentNavItem == null){
    
    
            }
            else{
                outState.putInt(STATE_CURRENT_NAV, mCurrentNavItem.ordinal());
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu)
        {
            getMenuInflater().inflate(R.menu.main, menu);
    
            return true;
        }
    
        /*
        @Override
        public boolean onPrepareOptionsMenu(Menu menu)
        {
            // if nav drawer is opened, hide the action items
            boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
            menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
            return super.onPrepareOptionsMenu(menu);
        }
        */
    
    
    
        private void displayNavFragment(MainNavItem navItem)
        {
            //if(navItem == mCurrentNavItem){
            //  return;
            //}
            Fragment fragment = Fragment.instantiate(this,
                    navItem.getFragClass().getName());
            if(fragment != null){
    
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.main, fragment)
                        .commit();
                //setCurrentNavItem(navItem);
            }
        }
    
        private void setCurrentNavItem(MainNavItem navItem)
        {
            int position = navItem.ordinal();
            // If navItem is in DrawerAdapter
    
            if(position >= 0 && position < mDrawerAdapter.getCount()){
                //mDrawerList.setItemChecked(position, true);
            }
            else{
                // navItem not in DrawerAdapter, de-select current item
                if(mCurrentNavItem != null){
                    //mDrawerList.setItemChecked(mCurrentNavItem.ordinal(), false);
                }
            }
    
            //test to keep item not selected
            int toClear=mDrawerList.getCheckedItemPosition();
    
            if (toClear >= 0) {
                mDrawerList.setItemChecked(toClear, false);
            }
    
            mDrawerLayout.closeDrawer(mDrawerList);
            //setTitle(navItem.getTitleResId());
            mCurrentNavItem = navItem;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
    
            switch (item.getItemId()) {
                case android.R.id.home:
                    if(mDrawerLayout.isDrawerOpen(mDrawerList)) {
                        mDrawerLayout.closeDrawer(mDrawerList);
    
                    }
                    else {
                        mDrawerLayout.openDrawer(mDrawerList);
                    }
                    return true;
                default:
    
                    return super.onOptionsItemSelected(item);
            }
        }
    
    
    
    
        public void goToSearch(MenuItem item){
    
            //go to search page
            Fragment Fragment_one;
            FragmentManager man= getSupportFragmentManager();
            FragmentTransaction tran = man.beginTransaction();
            Fragment_one = new Search();
    
            tran.replace(R.id.main, Fragment_one);//tran.
            tran.addToBackStack(null);
            tran.commit();
    
        }
    
        public void scanBarcode(MenuItem item){
    
            //open scanner
            IntentIntegrator scanIntegrator = new IntentIntegrator(this);
            scanIntegrator.initiateScan();
    
    
    
        }
    
        public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    
            //retrieve scan result
            IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
            if (scanningResult != null) {
                //we have a result
    
                String scanContent = scanningResult.getContents();
    
                //todo: set scan content into setting, load new fragment which calls async task below. New
                //todo: fragment will have same ui as search. :-)
                Fragment Fragment_one;
    
    
    
    
                FragmentManager man= this.getSupportFragmentManager();
                FragmentTransaction tran = man.beginTransaction();
                BarcodeFrag fragmentNew = new BarcodeFrag();
                Bundle bundle = new Bundle();
                bundle.putString("scanContent", scanContent);
                fragmentNew.setArguments(bundle);
    
    
                tran.replace(R.id.main, fragmentNew);//tran.
                tran.addToBackStack(null);
                //tran.commit();
                tran.commitAllowingStateLoss();
    
    
            }
    
            else{
                Toast toast = Toast.makeText(getApplicationContext(),
                        "No scan data received!", Toast.LENGTH_SHORT);
                toast.show();
            }
    
        }
    
    
    
    }
    

    Facebook gave me these instructions in order to track install. The error points out I seem to be missing some arguments, did the instructions miss something:

    enter image description here