0

I am trying to start a new Activity form Fragment. I keep getting the following error:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference

Here is my code:

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class Tap1 extends Fragment {

private Button button;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.content_tap1,container,false);

    button = (Button) getView().findViewById(R.id.button);

    return  view;
}

public void faceMask(View v)
{
    Intent i = new Intent(getActivity(), ShoppingCart.class);
    startActivity(i);
}

}

Here is the xml file(layout):

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout 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="com.example.amer.dentalhouse.Tap1">

       <ScrollView
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <RelativeLayout    
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button 
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Face Mask"
            android:id="@+id/button"
            android:drawableTop="@drawable/facemask"
            android:layout_alignParentTop="true"
            android:layout_alignLeft="@+id/button1"
            android:layout_alignStart="@+id/button1"
            android:clickable="true"
            android:onClick="faceMask" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Barieer"
            android:id="@+id/button1"
            android:drawableTop="@drawable/barieer"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="320dp" />

        <Button
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="Dispnser"
            android:id="@+id/button2"
            android:drawableTop="@drawable/dispnser"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginTop="700dp" />

    </RelativeLayout>

    </ScrollView>

    </LinearLayout>

Here's the entire error I get from one run after clearing the logcat

    : FATAL EXCEPTION: main
  Process: com.example.amer.dentalhouse, PID: 24812
  java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
      at com.example.amer.dentalhouse.Tap1.onCreateView(Tap1.java:23)
      at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
      at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)
      at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:163)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:1106)
      at android.support.v4.view.ViewPager.populate(ViewPager.java:952)
      at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1474)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
      at android.view.View.measure(View.java:17951)
      at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:940)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
      at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
      at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
      at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5797)
      at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
      at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2910)
      at android.view.View.measure(View.java:17951)
      at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2048)
      at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1185)
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1406)
      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1073)
      at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5988)
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
      at android.view.Choreographer.doCallbacks(Choreographer.java:580)
      at android.view.Choreographer.doFrame(Choreographer.java:550)
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:135)
      at android.app.ActivityThread.main(ActivityThread.java:5910)
      at java.lang.reflect.Method.invoke(Native Method)
      at java.lang.reflect.Method.invoke(Method.java:372)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
    a
MikeCAT
  • 73,922
  • 11
  • 45
  • 70
Mahmoud Ahmed
  • 307
  • 1
  • 3
  • 7

2 Answers2

0

Please try to use getView() inside the onActivityCreated() callback handler.

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    button = (Button) getView().findViewById(R.id.button);

}
Shalu T D
  • 3,921
  • 2
  • 26
  • 37
  • Thank you, but it still doesn't work Here's the entire error I get from one run after clearing the logcat 'W/art: Throwing OutOfMemoryError "Failed to allocate a 6880308 byte allocation with 4194304 free bytes and 6MB until OOM" E/AndroidRuntime: Error reporting crash java.lang.OutOfMemoryError: Failed to allocate a 6880308 byte allocation with 4194304 free bytes and 6MB until OOM' – Mahmoud Ahmed Mar 13 '16 at 10:12
  • at android.util.Log.getStackTraceString(Log.java:343) at com.android.internal.os.RuntimeInit.Clog_e(RuntimeInit.java:61) at com.android.internal.os.RuntimeInit.-wrap0(RuntimeInit.java) at com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:86) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690) – Mahmoud Ahmed Mar 13 '16 at 10:14
  • Actually I have answer your NullPointerException that you asked initially. The OutOfMemoryError is thrown not based on a single code line. It is depended on the memory allocations you have used in the entire app. Please optimize the momory by recycling the unused objects such as bitmaps etc. http://developer.android.com/training/articles/memory.html – Shalu T D Mar 13 '16 at 10:23
  • This message appear When i want to use onClick to open new activity ? – Mahmoud Ahmed Mar 13 '16 at 11:10
  • Any help with mine? http://stackoverflow.com/questions/39907625/why-is-accessing-textview-of-a-fragment-inside-activity-throwing-an-error – Si8 Oct 07 '16 at 01:42
0

You cannot use getView() until onCreateView() returns since it is the method in charge of creating said view. You can use the view that you've just inflated, so you should change your code to:

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.content_tap1,container,false);

    button = (Button) view.findViewById(R.id.button);

    return  view;
}
MWiesner
  • 8,868
  • 11
  • 36
  • 70
Tirupati Rao
  • 615
  • 6
  • 24
  • Thank you but still doesn't work <> – Mahmoud Ahmed Mar 13 '16 at 10:21
  • Bro I've edited this answer since it was almost correct and it had a minor error, instead of `view().findViewById` , just remove () and write `view.findViewById` and it'll work. I'm writing a comment because maybe the author will not approve the edit soon enough – Vucko Mar 13 '16 at 10:37
  • Thanks a lot, it works too.Can you help me at this problem please This message appear When i want to use onClick to open new activity ? – Mahmoud Ahmed Mar 13 '16 at 11:16
  • Just search stackoverflow on how to open new activity on button click, you'll find the answer in 10 seconds. – Vucko Mar 13 '16 at 12:29