0

I have an app with 4 different screens:

  • Main Activity: Acts as a frame for fragments
  • Main Fragment: Actual main fragment layout (code below)
  • Contact list: displays contacts pulled from the mobile device
  • Award list: list of awards a user can earn

Unless I'm totally misreading the error message, it seems there is an issue inflating the main fragment but I am not sure why.

I've tried shrinking the size of the drawables to where they total 512kb as I've read the way android handles Bitmaps can cause memory issues.

I've been getting the following error message:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.smd.android.myapp/com.smd.android.myapp.MainActivity}: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class android.widget.RelativeLayout
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java)
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                         at android.os.Looper.loop(Looper.java:148)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                      Caused by: android.view.InflateException: Binary XML file line #1: Binary XML file line #1: Error inflating class android.widget.RelativeLayout
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
                                                                         at com.smd.android.myapp.MainActivityFragment.onCreateView(MainActivityFragment.java:55)
                                                                         at android.app.Fragment.performCreateView(Fragment.java:2220)
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
                                                                         at android.app.BackStackRecord.run(BackStackRecord.java:793)
                                                                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
                                                                         at android.app.FragmentController.execPendingActions(FragmentController.java:325)
                                                                         at android.app.Activity.performStart(Activity.java:6252)
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:148) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                      Caused by: android.view.InflateException: Binary XML file line #1: Error inflating class android.widget.RelativeLayout
                                                                         at android.view.LayoutInflater.createView(LayoutInflater.java:645)
                                                                         at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58)
                                                                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694)
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762)
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                         at com.smd.android.myapp.MainActivityFragment.onCreateView(MainActivityFragment.java:55) 
                                                                         at android.app.Fragment.performCreateView(Fragment.java:2220) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
                                                                         at android.app.BackStackRecord.run(BackStackRecord.java:793) 
                                                                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
                                                                         at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
                                                                         at android.app.Activity.performStart(Activity.java:6252) 
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:148) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                      Caused by: java.lang.reflect.InvocationTargetException
                                                                         at java.lang.reflect.Constructor.newInstance(Native Method)
                                                                         at android.view.LayoutInflater.createView(LayoutInflater.java:619)
                                                                         at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                                                                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694) 
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762) 
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                         at com.smd.android.myapp.MainActivityFragment.onCreateView(MainActivityFragment.java:55) 
                                                                         at android.app.Fragment.performCreateView(Fragment.java:2220) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
                                                                         at android.app.BackStackRecord.run(BackStackRecord.java:793) 
                                                                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
                                                                         at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
                                                                         at android.app.Activity.performStart(Activity.java:6252) 
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:148) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                                                                      Caused by: java.lang.OutOfMemoryError: Failed to allocate a 150994956 byte allocation with 1044448 free bytes and 94MB until OOM
                                                                         at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                         at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                         at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
                                                                         at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
                                                                         at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
                                                                         at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
                                                                         at android.content.res.Resources.loadDrawable(Resources.java:2540)
                                                                         at android.content.res.TypedArray.getDrawable(TypedArray.java:870)
                                                                         at android.view.View.<init>(View.java:3948)
                                                                         at android.view.ViewGroup.<init>(ViewGroup.java:573)
                                                                         at android.widget.RelativeLayout.<init>(RelativeLayout.java:248)
                                                                         at android.widget.RelativeLayout.<init>(RelativeLayout.java:244)
                                                                         at android.widget.RelativeLayout.<init>(RelativeLayout.java:240)
                                                                         at java.lang.reflect.Constructor.newInstance(Native Method) 
                                                                         at android.view.LayoutInflater.createView(LayoutInflater.java:619) 
                                                                         at com.android.internal.policy.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:58) 
                                                                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:694) 
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:762) 
                                                                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) 
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                         at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
                                                                         at com.smd.android.myapp.MainActivityFragment.onCreateView(MainActivityFragment.java:55) 
                                                                         at android.app.Fragment.performCreateView(Fragment.java:2220) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973) 
                                                                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
                                                                         at android.app.BackStackRecord.run(BackStackRecord.java:793) 
                                                                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535) 
                                                                         at android.app.FragmentController.execPendingActions(FragmentController.java:325) 
                                                                         at android.app.Activity.performStart(Activity.java:6252) 
                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                         at android.os.Looper.loop(Looper.java:148) 
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

The Layout file I believe its referring to is the main activity fragment:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context="com.smd.android.myapp.MainActivityFragment"
android:id="@+id/background_layout"
android:background="@drawable/background">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:id="@+id/relativeLayout2"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="182dp">


    <Button
        android:id="@+id/btn_award"
        android:layout_width="53dp"
        android:layout_height="100dp"
        android:layout_column="59"
        android:layout_gravity="right|center_vertical"
        android:layout_marginLeft="@dimen/fab_margin"
        android:layout_marginRight="@dimen/fab_margin"
        android:layout_marginStart="98dp"
        android:background="@drawable/awards"
        android:backgroundTint="@color/colorAccent"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

    <Button
        android:id="@+id/contactButton"
        android:layout_width="63dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_column="56"
        android:layout_gravity="center"
        android:layout_marginStart="89dp"
        android:layout_toEndOf="@+id/btn_award"
        android:background="@drawable/contacts"
        android:textColor="@color/colorAccent"
        android:backgroundTint="@color/colorAccent" />

    <ImageView
        android:layout_width="250dp"
        android:layout_height="125dp"
        android:id="@+id/imageView"
        android:layout_gravity="center"
        android:background="@drawable/divider"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

</RelativeLayout>

<com.facebook.login.widget.LoginButton
    android:id="@+id/fb_login_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="138dp" />



<Button
    android:id="@+id/btn_sms"
    android:layout_width="64dp"
    android:layout_height="64dp"
    android:background="@drawable/main_button"
    android:elevation="5dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_margin="@dimen/activity_horizontal_margin"
    />

<ImageView
    android:layout_width="256dp"
    android:layout_height="wrap_content"
    android:id="@+id/imageView2"
    android:src="@drawable/x_header"
    android:layout_above="@+id/relativeLayout2"
    android:layout_centerHorizontal="true" />

MainActivityFragment:

public class MainActivityFragment extends Fragment {
Button btnSMS;
Button btnContact;
Button btnAward;
SMSHandle smsHandle;
FacebookHandle facebookHandle;
CallbackManager callbackManager;
LoginButton btnLoginFB;

private String TAG = "MainFragment";

public MainActivityFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    smsHandle = new SMSHandle();
    facebookHandle = new FacebookHandle();
    SMSHandle.getStoredContacts();
    FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
    callbackManager = CallbackManager.Factory.create();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_main, container, false);

    btnSMS = (Button)v.findViewById(R.id.btn_sms);
    btnContact = (Button) v.findViewById(R.id.contactButton);
    btnAward = (Button) v.findViewById(R.id.btn_award);

    btnAward.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           getFragmentManager().beginTransaction().replace(R.id.activityContainer,new AwardListFragment()).addToBackStack(null).commit();
        }
    });

    btnContact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           getFragmentManager().beginTransaction().replace(R.id.activityContainer,new ContactListFragment()).addToBackStack(null).commit();
        }
    });

    btnSMS.setOnClickListener(new View.OnClickListener(){
        public void onClick(View view) {
            //Send SMS
            smsHandle.sendToSelectedContacts(getActivity().getApplicationContext());


            ((MainActivity)getActivity()).requestSMS();
            // Post to Facebook, if logged in
            if(AccessToken.getCurrentAccessToken() != null) {
                facebookHandle.postStatus(facebookHandle.getMsg());
                Log.d(TAG,"Posted to Facebook");
            }

        }
    });

    btnLoginFB = (LoginButton) v.findViewById(R.id.fb_login_button);
    btnLoginFB.setFragment(this);

    btnLoginFB.setPublishPermissions(Arrays.asList("publish_actions"));

    btnLoginFB.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(getActivity(),"Logged in successfully", Toast.LENGTH_SHORT).show();
            facebookHandle.getUserID();
        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onError(FacebookException error) {
            Log.e(TAG,error.getMessage().toString());
        }
    });

    return v;
}

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


}

EDIT: I've tried the suggestion for java.lang.OutOfMemoryError - BitmapFactory.decode(strPath)and Android : java.lang.OutOfMemoryError: with no success.

Community
  • 1
  • 1
xv47
  • 992
  • 3
  • 13
  • 18
  • So, you read how android handles bitmaps, but what are you doing about it other than shrinking resources? – OneCricketeer Jul 27 '16 at 00:49
  • One of the things I tried was to remove all drawables and ImageViews using colors where applicable. That didn't make a difference. I only have 2 imageView's which total 34kb. – xv47 Jul 27 '16 at 00:58
  • I've also tried adding `android:largeHeap="true"` to my manifest as many posts suggest but that doesn't help. – xv47 Jul 27 '16 at 01:18

1 Answers1

0

I found the solution. I was using an individual drawable in the res/drawable folder for each image. Having multiple sizes in the drawable-xhdpi, drawable-xxhdpi, etc folders resolved this issue.

xv47
  • 992
  • 3
  • 13
  • 18