Autore Topic: No empty constructor  (Letto 568 volte)

Offline Blodhgard

  • Utente junior
  • **
  • Post: 53
  • Respect: +3
    • Mostra profilo
    • Budget Veloce
  • Dispositivo Android:
    Nexus 5, S4 mini, Galaxy Tab S
  • Play Store ID:
    blodhgard
  • Sistema operativo:
    Windows 8.1
No empty constructor
« il: 26 Ottobre 2014, 11:26:23 CET »
0
Ciao a tutti!
oggi mi sono arrivate 2 segnalazioni simili:

Codice: [Seleziona]
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.blodhgard.easybudget/com.blodhgard.easybudget.MainActivity}: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.blodhgard.easybudget.MainActivity$MainFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1996)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.access$600(ActivityThread.java:127)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1174)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4503)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.support.v4.app.Fragment$InstantiationException: Unable to instantiate fragment com.blodhgard.easybudget.MainActivity$MainFragment: make sure class name exists, is public, and has an empty constructor that is public
at android.support.v4.app.Fragment.instantiate(Fragment.java:413)
at android.support.v4.app.FragmentState.instantiate(Fragment.java:97)
at android.support.v4.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:1790)
at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:213)
at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:97)
at com.blodhgard.easybudget.MainActivity.onCreate(MainActivity.java:54)
at android.app.Activity.performCreate(Activity.java:4479)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1960)
... 11 more
Caused by: java.lang.InstantiationException: can't instantiate class com.blodhgard.easybudget.MainActivity$MainFragment; no empty constructor
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.support.v4.app.Fragment.instantiate(Fragment.java:402)
... 19 more

Purtroppo da questo logcat non riesco a capire dov'è il problema.
Secondo voi potrei risolvere aggiungendo
Codice (Java): [Seleziona]
public MainFragment()
                { }

al mio fragment? prima non indicavo nessun costruttore.
Codice (Java): [Seleziona]
@SuppressLint("ValidFragment") public class MainFragment extends Fragment
        {
                public MainFragment()
                { }
               
                @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {  
                    return inflater.inflate(frag_ID, container, false);
            }
               
               
                @Override
                public void onViewCreated (View view, Bundle savedInstanceState)
                {
                        super.onViewCreated(view, savedInstanceState);                 
               
                        TextView textView;
                       
                        switch(frag_ID)
                        {                              
                                case(R.layout.fragment_message):
                                        ...
                                       
                                        break;
                        }
                }
        }

Grazie!

Post unito: 26 Ottobre 2014, 16:18:47 CET
Alla fine ho capito quale era l'errore che causava questo problema.
Era un altro errore che poi quando cercava di ricreare la pagina lanciava questo.
Comunque cambio domanda: E' buona norma inserire sempre un costruttore vuoto? (Quando non ho nessun altro costruttore).
« Ultima modifica: 26 Ottobre 2014, 16:18:47 CET da Blodhgard, Reason: Merged DoublePost »

Offline CrotaNexus

  • Utente normale
  • ***
  • Post: 156
  • Vuolsi così colà dove si puote ciò che si vuole
  • Respect: +25
    • Google+
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    SimoneDev
  • Sistema operativo:
    Windows 8.1
Re:No empty constructor
« Risposta #1 il: 26 Ottobre 2014, 20:40:13 CET »
0
Ciao, alla fine come hai risolto?

Inviato dal mio Galaxy Nexus con Tapatalk 2

SimoneDev @ Google Play Store

Offline Blodhgard

  • Utente junior
  • **
  • Post: 53
  • Respect: +3
    • Mostra profilo
    • Budget Veloce
  • Dispositivo Android:
    Nexus 5, S4 mini, Galaxy Tab S
  • Play Store ID:
    blodhgard
  • Sistema operativo:
    Windows 8.1
Re:No empty constructor
« Risposta #2 il: 27 Ottobre 2014, 00:40:11 CET »
0
L'errore sopra compare solo a seguito di un altro errore.
Nel mio caso era un indexoutofbound exception, penso che il sistema operativo a quel punto tentasse di ricreare l'activity ma a quel punto non so perchè mi dava che mancava il costruttore vuoto.
Io per sicurezza l'ho aggiunto ma comunque ho eliminato l'altro errore e dovrei essere a posto  ;-)