I have a multi-activity app that is already on the market and is generally working fine. Just recently I have been modifying the code to process my (mopub) adverts in a different way. This seems to work fine when I run the program and play through multiple levels. The ads are appearing exactly when and where I want them. The problem comes after I quit the program and then try and start it again. My program's first activity is a "splash screen". On the second run I get the following error:
04-23 11:16:50.374: W/dalvikvm(10512): threadid=1: thread exiting with uncaught exception (group=0x40015560)
04-23 11:16:50.394: E/AndroidRuntime(10512): FATAL EXCEPTION: main
04-23 11:16:50.394: E/AndroidRuntime(10512): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.mygame/com.mycompany.mygame.Splash}: android.view.InflateException: Binary XML file line #24: Error inflating class <unknown>
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.os.Looper.loop(Looper.java:123)
04-23 11:16:50.394: E/AndroidRuntime(10512): at android.app.ActivityThread.main(ActivityThread.java:3683)
Any idea what could cause this - and why it didn't complain on the first run?
EDIT:
Here's the xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_horizontal|center_vertical"
android:background="#drawable/background"
android:orientation="vertical" >
<LinearLayout
android:id="#+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<TextView
android:id="#+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" Blah blah blah"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView <<== THIS IS LINE 24
android:id="#+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="#drawable/mygame_logo" />
<TextView
android:id="#+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" My company name"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</LinearLayout>
EDIT: In response to a comment...
I have an application class defined as:
public class Globals extends Application
{
}
In its onCreate method I have...
allocate_and_initialise_fresh_new_mAdView();
load_mopub_banner_ad();
which are defined as...
void allocate_and_initialise_fresh_new_mAdView()
{
mAdView = new MoPubView(this);
mAdView.setAdUnitId("agltb3B1Yi1pbmNyDAsSBFNpdGUYkaoMDA");// PUB_ID_320x50
}
void load_mopub_banner_ad()
{
if (mAdView != null)
{
mAdView.loadAd();
}
debug("Completed loadAd");
}
You are initializing a View in the Application class!
This is inadvisable and may mess things up. The context of a view should be the Activity that encompasses its lifetime. That is what the os expects from you.
Just remove it from the Application class and these errors will not re-appear.
Related
I'm working on getting the Google Place API to appear within a CardView.
The particular code I'm looking at is from GitHub, seems to be working for everyone else but I don't understand why it's throwing me an error.
This is the error I am getting:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rizwanqureshi.kevstaxiscanterbury, PID: 6818
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rizwanqureshi.kevstaxiscanterbury/com.rizwanqureshi.kevstaxiscanterbury.CustomerMapsActivity}: android.view.InflateException: Binary XML file line #50 in com.rizwanqureshi.kevstaxiscanterbury:layout/activity_customer_maps: Binary XML file line #50 in com.rizwanqureshi.kevstaxiscanterbury:layout/activity_customer_maps: Error inflating class android.fragment.app.FragmentContainerView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: android.view.InflateException: Binary XML file line #50 in com.rizwanqureshi.kevstaxiscanterbury:layout/activity_customer_maps: Binary XML file line #50 in com.rizwanqureshi.kevstaxiscanterbury:layout/activity_customer_maps: Error inflating class android.fragment.app.FragmentContainerView
Caused by: android.view.InflateException: Binary XML file line #50 in com.rizwanqureshi.kevstaxiscanterbury:layout/activity_customer_maps: Error inflating class android.fragment.app.FragmentContainerView
Caused by: java.lang.ClassNotFoundException: android.fragment.app.FragmentContainerView
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:454)
at android.view.LayoutInflater.createView(LayoutInflater.java:815)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:438)
at android.app.Activity.setContentView(Activity.java:3324)
at com.rizwanqureshi.kevstaxiscanterbury.CustomerMapsActivity.onCreate(CustomerMapsActivity.java:116)
at android.app.Activity.performCreate(Activity.java:7802)
at android.app.Activity.performCreate(Activity.java:7791)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.fragment.app.FragmentContainerView" on path: DexPathList[[zip file "/data/app/com.rizwanqureshi.kevstaxiscanterbury-Nkg-1mQCfbE8I1MoJKHQuA==/base.apk"],nativeLibraryDirectories=[/data/app/com.rizwanqureshi.kevstaxiscanterbury-Nkg-1mQCfbE8I1MoJKHQuA==/lib/x86, /system/lib, /system/product/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
... 32 more
The main takeaway is that there is an Error inflating class android.fragment.app.FragmentContainerView and that the issue is at line 50 of the XML.
This is the XML:
<FrameLayout
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"
tools:context=".CustomerLogin" >
<androidx.fragment.app.FragmentContainerView
android:id="#+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/buttons">
<Button
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="#+id/logout"
android:text="logout"
tools:ignore="ButtonStyle" />
<Button
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="#+id/history"
android:text="history"
tools:ignore="ButtonStyle" />
<Button
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="#+id/settings"
android:text="Settings"
tools:ignore="ButtonStyle" />
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_below="#+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20sp">
//***LINE 50 WHERE THE ERROR IS***
<android.fragment.app.FragmentContainerView
android:id="#+id/place_autocomplete_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ExtraText">
android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
</android.fragment.app.FragmentContainerView>
</androidx.cardview.widget.CardView>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="bottom">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="#+id/driverInfo"
android:layout_gravity="bottom"
android:orientation="horizontal"
android:background="#android:color/white"
android:visibility="gone">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="40sp">
</LinearLayout>
</LinearLayout>
<LinearLayout
android:background="#android:color/white"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
</LinearLayout>
</FrameLayout>
So I guess there is something wrong with the FragmentContainerView? But i'm not getting any errors in the code and nothing is coming up on Google.
I feel like maybe something is outdated rather than outright incorrect but I haven't a clue.
Thanks for any input.
just try to define your startDestination in your navigation xml !
You should implement new androidx.fragment dependencies to use FragmentContainerView. It is already added since version 1.2.0. You can check here
implementation "androidx.fragment:fragment:1.2.5"
In my case, I had a Model which was used as arguments but I had not implemented Serializable and Parcelable implementaion.
This problem was created for me as well. The reason was two mistakes.
1.I did not add startDestination in nav graph .
2.I did not add #AndroidEntryPoint annotation in MainActivitey .
This error will only occur after you have added ProGuard & R8 to your project. To fix it, add the following two lines in proguard-rule.pro:
-keepnames class androidx.navigation.fragment.NavHostFragment
-keep class * extends androidx.fragment.app.Fragment{}
For me it was a typo within one of the fragments the navGraph, in the class path of the android:name attribute.. Adding a wrong path for the fragment class doesn't provide a compile time error, instead it raises android.view.InflateException...Error inflating class android.fragment.app.FragmentContainerView
So, make sure to have a correct packaging path for your fragments in android:name
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="#+id/nav_graph.xml"
app:startDestination="#id/mainFragment">
<fragment
android:id="#+id/mainFragment"
android:name="com.example.android....MainFragment" // <<<< This must be a correct path
android:label="main_fragment"
</fragment>
</navigation>
If it is Due to Proguard Then add few lines
In proguard-rules.pro file
....
# for FragmentContainerView error
-keepnames class androidx.navigation.fragment.NavHostFragment
-keep class * extends androidx.fragment.app.Fragment{}
Your activity must be a child of FragmentActivity to use androidx.fragment.app.FragmentContainerView either you extend the FragmentActivity or the AppCompatActivity which is a child FragmentActivity class. It is recommended to extend the AppCompatActivity.
see: https://www.tutorialguruji.com/android/trying-to-use-navhostfragment-and-im-getting-an-error-error-inflating-class-androidx-fragment-app-fragmentcontainerview/
Probably after Refactor->Remove unused resources you can lost id from your androidx.fragment.app.FragmentContainerView - bring it back
In my case, despite the same error, reason was different.
However this info about adding some rules to proguard-rules.pro pointed me into the right direction. This, and some other clues in error log about problems with argument in navigation XML file.
Eventually I found that it was problem with using my own classes in argument. And I don't mean the class of argument, but the fact that this class also used some of my other classes. And it was enough to add rules for each of these other classes:
-keepnames class <MyClass>
...
If you have done all the solutions and still the problem stands maybe you should check if your fragment constructor is empty.
In my case I looked deeper inside my stacktrace and found this line: Caused by: java.lang.IllegalStateException: FragmentContainerView must have an android:id to add Fragment MyFragment. Giving it an id and specifying tools:layout fixed problem
I'm using 2 phones for debuging and 1 phone is showing my activity fine and the other dose the error, how can I repair it + how can I handle it for another users to not have crashes?
the crash:
07-19 19:51:33.614 18679-18679/itay.finci.org.allerwarn E/AndroidRuntime: FATAL EXCEPTION: main
Process: itay.finci.org.allerwarn, PID: 18679
java.lang.RuntimeException: Unable to start activity ComponentInfo{itay.finci.org.allerwarn/itay.finci.org.allerwarn.intro.IntroActivity}: android.view.InflateException: Binary XML file line #38: Error inflating class com.miz.introactivity.NextDoneButton
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2250)
at android.app.ActivityThread.access$800(ActivityThread.java:139)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1200)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5105)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #38: Error inflating class com.miz.introactivity.NextDoneButton
edit:
thanks for AndroidStudio decompiler I adding the done.xml that dose all the errors.
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="36dp"
android:height="36dp"
android:viewportHeight="48"
android:viewportWidth="48">
<group android:name="done_group">
<path
android:name="done"
android:fillColor="#android:color/white"
android:pathData="M18 32.34L9.66 24l-2.83 2.83L18 38l24-24-2.83-2.83z" />
</group>
</vector>
edit 2:
the layout xml out of the library:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="#+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<FrameLayout
android:layout_width="match_parent"
android:paddingLeft="#dimen/title_padding_left"
android:paddingStart="#dimen/title_padding_left"
android:paddingRight="#dimen/title_padding_right"
android:paddingEnd="#dimen/title_padding_right"
android:layout_height="#dimen/navigation_height"
android:layout_gravity="bottom">
<Button
android:id="#+id/skip_button"
android:layout_gravity="center_vertical|left|start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/skip"
android:textColor="#color/skip_text_color"
style="?attr/borderlessButtonStyle"
/>
<LinearLayout
android:id="#+id/progress_layout"
android:orientation="horizontal"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.miz.introactivity.NextDoneButton
android:id="#+id/next_button"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_gravity="center_vertical|right|end"
android:background="#drawable/next_done_button_selector"
/>
</FrameLayout>
</merge>
its an error in your IntroActivity. InflateException: Binary XML file line #38: Error inflating class com.miz.introactivity.NextDoneButton
More than likely; this could be due to any LARGE images you are using and the device is simply out of memory to display it. Try resizing the image to make the size of it smaller
I am facing out of memory error when i debugged my code it is failing in below line of code:
setContentView(R.layout.activity_drawer);
The error is as below:
01-01 23:16:14.611 24083-24083/? E/CrashReporting﹕ ParseCrashReporting caught a OutOfMemoryError exception for wishlist.oj.app. Building report.
01-01 23:16:14.613 24083-24083/? E/CrashReporting﹕ Handling exception for crash
java.lang.OutOfMemoryError: Failed to allocate a 86400012 byte allocation with 16777120 free bytes and 66MB 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:988)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2578)
at android.content.res.Resources.loadDrawable(Resources.java:2471)
at android.content.res.TypedArray.getDrawable(TypedArray.java:749)
at android.widget.ImageView.<init>(ImageView.java:146)
at android.widget.ImageView.<init>(ImageView.java:135)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:58)
at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:54)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:95)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:938)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:992)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:256)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)
at wishlist.oj.app.home.ActivityDrawer.onCreate(ActivityDrawer.java:34)
at android.app.Activity.performCreate(Activity.java:6072)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424)
at android.app.ActivityThread.access$900(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:139)
My activity_drawer XML code looks like below:
<android.support.v4.widget.DrawerLayout 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:id="#+id/drawer_layout"
tools:context=".ActivityDrawer">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="#+id/tool_bar"
theme="#style/MyToolbarThemeSimple.Base"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="#color/colorPrimary"
>
</android.support.v7.widget.Toolbar>
<FrameLayout
android:id="#+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
</LinearLayout>
<!-- The Navigation drawer -->
<RelativeLayout
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="#color/windowBackground"
android:id="#+id/drawer"
android:layout_gravity="start">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="#+id/cardview_drawer"
/>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
I have tried many things like I increased the heap size to -Xmx2048m -XX:MaxPermSize=512m by using Compiler VM options.
Also, I checked the option "compile independent modules in parallel" present inside Settings => Build,Execution,Development Enviroment => compiler
But nothing worked out .. Any help??
A link showing how to load bitmaps efficiently with sample code.
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
This type of error usually occurs if your image is too large to be loaded (causing an OutOfMemoryError.
I would suggest scaling down your image, or using a lower resolution image, so it can be loaded into the memory easier.
There are also a variety of sources you can visit including the Android developer docs with a sample app, as well as YouTube videos such as this one.
I'm trying to load a fragment in my Main Activity which will become one of my navigation tabs later. the problem is that the app crashes and says that the fragment cannot be inflated.
I found other similar questions but none of the solutions could help me
Here's my code
MainActivity.java
public class MainActivity extends FragmentActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.projecttabs.MainActivity">
<fragment
android:id="#+id/fragment1"
android:name="com.example.projecttabs.FragmentAbout"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp" />
</LinearLayout>
FrgagmentAbout.java
public class FragmentAbout extends Fragment {
public View OnCreateView(LayoutInflater l, ViewGroup v, Bundle savedInstanceState){
return l.inflate(R.layout.fragment_about,v,false);
}
}
fragment_about.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#000">
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="182dp"
android:text="ButtonTest" />
</RelativeLayout>
logCat
FATAL EXCEPTION: main
Process: com.example.projecttabs, PID: 1709
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.projecttabs/com.example.projecttabs.MainActivity}: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
at android.app.ActivityThread.access$700(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4998)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
at android.app.Activity.setContentView(Activity.java:1928)
at com.example.projecttabs.MainActivity.onCreate(MainActivity.java:25)
at android.app.Activity.performCreate(Activity.java:5243)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
... 11 more
Caused by: java.lang.IllegalStateException: Fragment com.example.projecttabs.FragmentAbout did not create a view.
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:314)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
For what I understand, MainActivity class sets the contentView to main_activity layout, then, in main_activity.xml file, FragmentAbout class is called to replace the fragment by fragment_about layout. am I right?
please, help me!
thanks!
It should be onCreateView() with a lowercase 'o' in FragmentAbout
In the future, try using the java annotation #Override to avoid this stupid bugs
Very strange and frustrating error.
As soon as I load my app on the emulator and try to open it, I am receieving a null pointer exception error within the on create method.
As said in the title, this code has worked perfectly for weeks.
Here is the logcat:
02-14 20:03:45.813: E/AndroidRuntime(285): FATAL EXCEPTION: main
02-14 20:03:45.813: E/AndroidRuntime(285): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.flybase2/com.example.flybase2.MainActivity}: java.lang.NullPointerException
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.os.Looper.loop(Looper.java:123)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-14 20:03:45.813: E/AndroidRuntime(285): at java.lang.reflect.Method.invokeNative(Native Method)
02-14 20:03:45.813: E/AndroidRuntime(285): at java.lang.reflect.Method.invoke(Method.java:521)
02-14 20:03:45.813: E/AndroidRuntime(285): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-14 20:03:45.813: E/AndroidRuntime(285): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-14 20:03:45.813: E/AndroidRuntime(285): at dalvik.system.NativeStart.main(Native Method)
02-14 20:03:45.813: E/AndroidRuntime(285): Caused by: java.lang.NullPointerException
02-14 20:03:45.813: E/AndroidRuntime(285): at com.example.flybase2.MainActivity.onCreate(MainActivity.java:33)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-14 20:03:45.813: E/AndroidRuntime(285): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-14 20:03:45.813: E/AndroidRuntime(285): ... 11 more
and here is the class:
package com.example.flybase2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainActivity extends Activity implements OnClickListener{
Button bContacts;
Button bAppointment;
Button bShopping;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.appmenus);
bContacts = (Button) findViewById(R.id.btnCons);
bAppointment = (Button) findViewById(R.id.btnAppoint);
bShopping = (Button) findViewById(R.id.btnShop);
bContacts.setOnClickListener(this);
bAppointment.setOnClickListener(this);
bShopping.setOnClickListener(this);
}
#Override
public void onClick(View passedAppChoice) {
switch(passedAppChoice.getId()){
case (R.id.btnCons):
Intent cons = new Intent("com.example.flybase2.contacts");
startActivity(cons);
break;
case (R.id.btnAppoint):
Intent Appoint = new Intent("com.example.flybase2.appointmantMenu");
startActivity(Appoint);
break;
case (R.id.btnShop):
Intent shop = new Intent("com.example.flybase2.ShoppingList");
startActivity(shop);
break;
}
}
}
Appmenus.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="84dp"
android:orientation="horizontal" >
<ImageView
android:id="#+id/imgLink"
android:layout_width="60dp"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:layout_weight="0.91"
android:src="#drawable/menulist" />
<TextView
android:id="#+id/textView1"
android:layout_width="165dp"
android:layout_height="match_parent"
android:layout_weight="0.14"
android:gravity="center"
android:text="Menu"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textSize="40sp" />
</LinearLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="#+id/btnCons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:drawableLeft="#drawable/consicon"
android:src="#drawable/consicon"
android:text="Contacts " />
<Button
android:id="#+id/btnToDo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:drawableLeft="#drawable/todo"
android:src="#drawable/todo"
android:text="'To Do' List" />
<Button
android:id="#+id/btnShop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:drawableLeft="#drawable/shoppingmenu"
android:src="#drawable/shoppingmenu"
android:text="Shopping List" />
<Button
android:id="#+id/btnAppoint"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:drawableLeft="#drawable/appointmainicon"
android:src="#drawable/appointmainicon"
android:text="Appointment List" />
</LinearLayout>
</ScrollView>
</LinearLayout>
Hopefully someone can see where I have gone wrong!.
A Few Possible Things:
Does R.layout.appmenus contain all the above buttons (check the IDs). Since R.id is an app-wide namespace, it could have been in other layouts too
The way you're starting your intents seems odd. This is not how you start explicit intents.
An Explicit Intent should be of the form:
Intent explicitIntent = new Intent(InvokingActivity.this,InvokedActivity.class);
startActivity(explicitIntent);
add this logs print in onCreate just after initializing buttons objects.
Log.d("MainActivityTAG", "bContacts ="+bContacts+ ", bAppointment="+bAppointment+", bShopping="+bShopping);
it seems one of the button object from below code is null.
bContacts = (Button) findViewById(R.id.btnCons);
bAppointment = (Button) findViewById(R.id.btnAppoint);
bShopping = (Button) findViewById(R.id.btnShop);
above log print will let you know which button instance is null, and you ll get to know if you are getting button with wrong ID or setting wrong layout which doesn’t have one of these buttons defined.
Eventually started a new project and simply copied the code over so it was very quick. It is working now. I have no idea what happened but believe it is down to some sort of corruption in my XML appmenu.xml file layout. For what ever reason I think the appointments button can no longer be 'seen' by eclipse even though it is clearly there and referenced by its ID. Many thanks to all who contributed.