-1

I Ich habe eine App erstellt, die perfekt funktionierte, bevor ich ViewFlipper einführte. Ich muss das wirklich benutzen, aber jetzt stecke ich fest oder diese Ausnahme.java.lang.NullPointerException: Versuch, die virtuelle Methode für eine Nullobjektverweisliste aufzurufen. was soll ich machen?

frag_home.java

public class Frag_home extends Fragment { 
private String mParam1; 
private String mParam2; 
Animation fade_in, fade_out; 
ViewFlipper viewFlipper; 

private OnFragmentInteractionListener mListener; 

public Frag_home() { 
    // Required empty public constructor 
} 


// TODO: Rename and change types and number of parameters 
public static Frag_home newInstance(String param1, String param2) { 
    Frag_home fragment = new Frag_home(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_frag_home, container, false); 

    fade_in= AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); 
    fade_out=AnimationUtils.loadAnimation(getActivity(),R.anim.fade_out); 

    viewFlipper.setAnimation(fade_in); 
    viewFlipper.setAnimation(fade_out); 

    viewFlipper.setAutoStart(true); 
    viewFlipper.setFlipInterval(1000); 
    viewFlipper.startFlipping(); 
} 

// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 
public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    void onFragmentInteraction(Uri uri); 
} 

Logcat:

04-09 18:29:02.196 27863-27863/com.example.aastha.trying E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: com.example.aastha.trying, PID: 27863 
                     java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ViewFlipper.setAnimation(android.view.animation.Animation)' on a null object reference 
                      at com.example.aastha.trying.Frag_home.onCreate(Frag_home.java:70) 
                      at android.support.v4.app.Fragment.performCreate(Fragment.java:1951) 
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1029) 
                      at android.support.v4.app.BackStackRecord.ensureFragmentsAreInitialized(BackStackRecord.java:1077) 
                      at android.support.v4.app.BackStackRecord.beginTransition(BackStackRecord.java:1032) 
                      at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:658) 
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
                      at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:145) 
                      at android.app.ActivityThread.main(ActivityThread.java:5832) 
                      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:1399) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

Der Code über mir diese Ausnahme gibt:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ViewFlipper.setAnimation(android.view.animation.Animation)' on a null object reference 

Wie soll ich dieses Problem lösen? Bitte helfen Sie.

+0

haben Sie versucht, Ihren Code von onCreate zu onCreateView bewegt (nach dem Layout Aufblasen)? –

+0

wo ist 'viewFlipper' initialisiert? –

+5

Mögliches Duplikat von [Was ist eine Nullzeigerausnahme und wie behebe ich sie?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-fix-it) –

Antwort

-1

In Ihrem onCreate() viewFlipper ist immer noch null.

Stattdessen müssen Sie in Ihrem onCreateView() einen Verweis auf Ihren ViewFlipper mit findViewById erhalten und erst danach Operationen darauf ausführen.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 

    fade_in= AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); 
    fade_out=AnimationUtils.loadAnimation(getActivity(),R.anim.fade_out); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_frag_home, container, false); 
    viewFlipper = v.findViewById(R.id.<your_viewflipper_id>); 
    viewFlipper.setAnimation(fade_in); 
    viewFlipper.setAnimation(fade_out); 

    viewFlipper.setAutoStart(true); 
    viewFlipper.setFlipInterval(1000); 
    viewFlipper.startFlipping(); 
} 

onCreate() aufgerufen wird vor Ihr Layout aufgeblasen wird, so kann man nicht Ansichten dort zugreifen. Außerdem müssen Sie jede Ansicht über findViewById() in onCreateView() binden. Sie sollten sich die fragment lifecycle (figure 2) ansehen.

+0

Ich bin neu in Android App Entwicklung. Ich bin nicht wirklich sicher, wie ich das tun soll, da es eine Fragmentaktivität ist. –

+0

Sie sollten sich den Lebenszyklus von Aktivitäten und Fragmenten ansehen, wann welche Methoden aufgerufen werden usw. –

+0

Vielen Dank, es hat diese Ausnahme korrigiert, aber jetzt habe ich eine Ausnahme. java.lang.OutOfMemoryError: Konnte eine 51840012 Byte-Zuweisung nicht mit 15090576 freien Bytes und 14 MB zuweisen, bis OOM –

-1

So war die Antwort ziemlich einfach. Ich hatte nur den ViewFlipper in onCreateView Methode zu initialisieren:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v=inflater.inflate(R.layout.fragment_frag_home, container, false); 

    viewFlipper = (ViewFlipper) v.findViewById(R.id.background); 

    fade_in= AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); 
    fade_out=AnimationUtils.loadAnimation(getActivity(),R.anim.fade_out); 

    viewFlipper.setAnimation(fade_in); 
    viewFlipper.setAnimation(fade_out); 

    viewFlipper.setAutoStart(true); 
    viewFlipper.setFlipInterval(1000); 
    viewFlipper.startFlipping(); 
    return v; 

} 
+1

Sie folgen wieder dem falschen Muster, Sie akzeptieren die Antwort bedeutet, dass Sie jetzt fertig sind, Andere werden wissen, dass diese Antwort auf die Frage verweist ... Ich schlage vor, Sie nehmen eine [Tour] (http://stackoverflow.com/tour). –